svm处理流程:
- 收集数据,相关性分析(p卡方检验),特征选择(主成份分析)。
- 归一化数据。就是根据实际要求,将数据的取值范围转化为统一的区间如[a,b],a,b为整数。方法参考:http://slt-ml.blogspot.com/2008/06/spss.html
- 利用抽样技术将数据集分为训练集和测试集。抽样技术有分层抽样,简单抽样(等概率抽样)
- 将数据转化为软件(接口)所支持的格式。就libsvm(c++,java)来说,我们可以使用FormatDataLibsvm.xls将数据转化为libsvmm所要求的格式。参考:http://slt-ml.blogspot.com/2008/06/formatdatalibsvmxlslibsvm.html
- 选择核函数,可以优先考虑rbf。
- 对训练集利用交叉验证法选择最好的参数C和r(rbf核函数中的参数gama)。可以通过网格法寻找出最优的参数,注意一次交叉验证得到一个参数对所对应的模型精度,网格法目的就是找到使得模型精度达到对高的参数对(这里的参数对可能不止两个,有可能也有其他的),可以使用一些启发式的搜索来降低复杂度,虽然这个方法笨了点,但是它能得到很稳定的搜索结果。需要提到的这里在对训练集进行分割的时候涉及到抽样,一个较好的方法就是分层抽样。从这步可以看出其实 Cross-Validation是一种评估算法的方法。
- 用6中得到的参数对在整个训练集合上进行训练,从而得出模型。
- 利用测试集测试模型,得到精度。这个精度可以认为是模型最终的精度。当然有人会担心3步中抽样会有一定的误差,导致8得到的精度不一定是最好的,因此可以重复3-8得到多个模型的精度,然后选择最好的一个精度最为模型的精度(或者求所有精度的均值做为模型精度)。