Sklearn中关于SVM:处理不平衡问题及使用建议

关于不平衡问题

     当需要关注特定的某一类或特定的样本时,可以使用class_weight和sample_weight参数进行设置:

   1. SVC、NuSVC有可选参数class_weight,以字典的形式{dict,’balanced’}设置,将第i类的参数C设置为class_weight[i]*C ;如果不指定该参数,各类的权重均为1;如果该参数设置为“balanced”模式,那么模型将根据输入的类别标签y,自动将各类的权重设置为 n_samples / (n_classes * np.bincount(y)) ,其中 np.bincount() 用来统计 array 中各个值出现的次数,尤其适合统计类别标签。
    2. uSVC、SVR、NuSVR和OneClassSVM中的fit方法包含sample_weight关键字, fit(X, y[, sample_weight]) ,其中 sample_weight 维度为( n_samples, ),类型为 array-like ,和类别权重类似,将第 i 个样本的参数 C 调整为 C*sample_weight[i] 。样本权重使分类器更加关注权重较高的样本点。

 

实际使用中的一些建议

    1.避免数据复制

    对于SVC、SVR、NuSVC、NuSVR,如果传递给模型的参数不是C-ordered contiguous(见附录链接)的,并且是双精度型的数,在调用底层的C程序实现模型之前,将需要对数据进行复制。可以通过numpy array变量的flags属性来查看数据是否为C-contiguous的。

    对于LinearSVC以及LogisticRegression,任何以numpy array形式传入的参数都将被复制并转换为线性内部稀疏数据形式(liblinear internalsparse data,双精度浮点数,且包含int32型的非零索引)。如果想避免对密集(dense)numpy C-contiguous双精度矩阵输入进行复制的情况下,拟合较大规模的线性分类器,建议使用SGDClassifier代替,该方法的目标函数可以配置的和LinearSVC模型几乎一致。

    2. 内核缓存大小

    对于SVC、SVR、nuSVC以及NuSVR,内核缓存的大小对运行时间的影响较大。如果RAM足够大,强烈建议将catch_size设置的比默认的200M大一些,比如500M或1000M。

    3. C的设置

    默认情况下,C的值为1。如果观测数据中噪声较多的话,应该适当的减小C值,相应的来规范化跟多的估计值

    4. 规范化数据

    支持向量机算法不能对变量进行尺度缩放,所以建议在进行建模前,对所使用的数据进行缩放,例如,将输入向量X中的每个特征都缩放到[0,1]或[-1,+1],或标准化为均值为0、方差为1。需要注意的是,必须对测试集进行同样的处理,以保证得到有意义的结果。更多关于数据预处理的内容参见附录3。

    5. 参数nu

    NuSVC、OneClassSVM、NuSVR中的nu参数是近似训练误差和支持向量间的比例的(fraction),即训练误差部分的上限和支持向量部分的下限,取值范围为(0, 1]。

    6. 数据平衡

    在SVC中,如果两类样本不平衡,可以设置class_weight='balanced',或者尝试不同的惩罚系数C。

    7. 关于LinearSVC

    LinearSVC的底层实现拟合模型的过程中,使用了随机数生成器来选择特征因此,对于相同的输入数据,得到的结果也可能会存在细微的差别,如果出现这种情况,可以适当的减小tol参数

    8. 使用L1惩罚

     使用LinearSVC(loss=’l2’,penalty=’l1’, dual=False)产生一个稀疏解,即只有部分特征的权值非零,对最终的决策函数起作用。增加C值可以产生更加复杂的模型(选中更多的特征)。产生空模型(所有的权值都等于0)的C值可以使用l1_min_c函数来计算。

 参考资料:

1.http://scikit-learn.org/stable/modules/svm.html#svm

2.https://stackoverflow.com/questions/26998223/what-is-the-difference-between-contiguous-and-non-contiguous-arrays

3.http://scikit-learn.org/stable/modules/preprocessing.html#preprocessing

 

猜你喜欢

转载自blog.csdn.net/u010397021/article/details/79928916