SVM中遇到的非均衡数据集

来源:互联网 发布:core java 9 中文版 编辑:程序博客网 时间:2024/05/19 23:25


    对于SVM中遇到的非均衡数据集,可以采用以下策略:
假设有4类样本,比如,第一类有500个,第二类有300个,第三类有600个,第四类有200个,那么,可以通过SVM的class_weights(CvSVM中有该参数)来进行均衡,具体如下,
1 求所有样本和,在这里为1600
2 求每一类样本数与总数的比值,如在这里为    500/1600=0.3125,
    300/1400=0.817,
    600/1600=0.375,
    200/1600=0.125,
3 求各个小数的比值,并转化为整数,在这里是
    5:3:6:2,
对于opencv中的SVM可以采用如下的方式给class_weights进行赋值:

CvSVMParams SVM_params;

float a[4]={5,3,6,2};
CvMat mat=cvMat(1,4,CV_32FC1,a);
SVM_params.class_weights=&mat;

    在这里,class_weights是C_SVC中的可选权重,赋给指定的类,乘以C变成
class_weights*C。所以这些权重影响不同类别的错误分类惩罚项。权重越大,某一类的误份类数据的惩罚项就越大。惩罚项越大,代表了其越不能够容忍错误。

0 0
原创粉丝点击