初窥SVM

今天和师兄交流了一番,终于对SVM有了初步的理解,虽然觉得自己还是很小白,但是有收获、有进步就好。

SVM处理流程(待修正):

1.  收集数据,相关性分析(p卡方检验),特征选择(主成份分析PCA)。PCA提取特征向量,用这些来分类,SVM是分类器,输入的就是特征向量。

2.  归一化数据。就是根据实际要求,将数据的取值范围转化为统一的区间如[a,b],a,b为整数。

3.  利用抽样技术将数据集分为训练集和测试集。抽样技术有分层抽样,简单抽样(等概率抽样)。一般训练集>测试集,就是要保证足够的训练样例。

4.  将数据转化为软件(接口)所支持的格式。就libsvm(c++,java)来说,我们可以使用FormatDataLibsvm.xls将数据转化为libsvm所要求的格式。

5.  选择核函数,可以优先考虑rbf。核函数是把低维数据映射到高维空间,让线性不可分的问题变成线性可分。

6. (训练)对训练集利用交叉验证法选择最好的参数C和r(西格玛) (rbf核函数中的参数gama)。

可以通过网格法寻找出最优的参数,注意一次交叉验证得到一个参数对所对应的模型精度,网格法(训练的一个过程)目的就是找到使得模型精度达到对高的参数对(这里的参数对可能不止两个,有可能也有其他的),可以使用一些启发式的搜索来降低复杂度,虽然这个方法笨了点,但是它能得到很稳定的搜索结果。需要提到的这里在对训练集进行分割的时候涉及到抽样,一个较好的方法就是分层抽样。从这步可以看出其实 Cross-Validation是一种评估算法的方法。

        a. 训练的目的得到参数和支持向量(存储在xml文件中),得到参数就能得到支持向量,带进算式计算SVM分类的准确度,以准确度最高的一组参数作为最终的结果,没有绝对线性可分的,都有一个误差,参数就是把那个误差降到最低。

        b.  这里的准确性是指将训练集的每个样本的向量与支持向量做运算,将运算结果与标记值比较,判断是否属于这个类,统计这个类的正确的样本数,最高的那一组参数准确性最高。

c. 最终训练得到分类器。SVM只能分两类,所以这里的分类器是两个类组成一个分类器,如果有K类,就有k(k-1)/2个分类器。

7.  用6中得到的参数对在整个训练集合上进行训练,从而得出模型(即分类器)

8.  利用测试集测试模型,得到精度。这个精度可以认为是模型最终的精度。当然有人会担心3步中抽样会有一定的误差,导致8得到的精度不一定是最好的,因此可以重复3-8得到多个模型的精度,然后选择最好的一个精度最为模型的精度(或者求所有精度的均值做为模型精度)。(需要多次选择训练集和测试集,然后每一次得到一个精度的模型,选择最好的一个精度作为模型,也就是我们项目里面要多次训练的原因)

9. 识别分类。两个类超平面的形成,意味着目标函数的形成,然后代入待识别样本,识别时对应的组代入对应的参数,得出结果进行投票,判定属于那个类。


参考:http://blog.sina.com.cn/s/blog_656c4f9c01010g7o.html

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值