您的位置:首页 > 其它

SVM中遇到的非均衡数据集

2016-05-27 10:36 190 查看

    对于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。所以这些权重影响不同类别的错误分类惩罚项。权重越大,某一类的误份类数据的惩罚项就越大。惩罚项越大,代表了其越不能够容忍错误。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: