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。所以这些权重影响不同类别的错误分类惩罚项。权重越大,某一类的误份类数据的惩罚项就越大。惩罚项越大,代表了其越不能够容忍错误。
对于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。所以这些权重影响不同类别的错误分类惩罚项。权重越大,某一类的误份类数据的惩罚项就越大。惩罚项越大,代表了其越不能够容忍错误。
相关文章推荐
- webSocket、Ajax轮询、长轮询(long poll)
- 仿微信支付页面
- web开发中的四个域对象生命周期 作用域详细介绍
- CentOS6.5安装配置Samba
- android:popupwindow响应返回键消失但不退出当前activity
- 在linux上搭建mycat环境
- Array.prototype.slice.call(arguments)
- jQuery事件绑定.on()简要概述及应用
- [HDOJ1827]Summer Holiday(强连通分量,缩点)
- Linux centos关机与重启命令详解
- 修改选择文件文本框及按钮样式
- Android中的Touch事件
- Tomcat集群配置学习篇-----分布式应用
- centOS6.5 命令配置ip地址
- libsvm 训练后的模型参数讲解
- android 游戏 动画
- Spring PropertyPlaceholderConfigurer实例
- Androin学习笔记五十三: Android中实现view可以滑动的六种方法
- YII XSS(跨站脚本攻击)
- 加载出一个有层次的下拉框