您的位置:首页 > 其它

scikit-learn中的SVM使用指南

2017-09-04 20:03 393 查看
本文主要包括以下内容:

1、 sklearn三个SVM分类器(sklearn.svm.LinearSVC,sklearn.svm.SVC,sklearn.svm.NuSVC)的参数详解

2、SVM算法调优的一些建议

3、实验

sklearn.svm.LinearSVC



penalty取值说明:

l1-SVM:



l2-SVM:



区别就是优化函数中的惩罚项中是松弛变量累加还是松弛变量平方累加。

关于这两者的比较,感兴趣的可以参考:

Comparison of L1 and L2 Support Vector Machines

关于dual,penalty和loss三个参数的组合:



问题:谁能解释下为什么有些(dual,penalty,loss)组合不行么?

问题2:如果合页损失函数和软间隔分类(考虑了松弛变量)是等价的,那在sklearn中,同时设置了penalty(松弛变量累加方式)和loss(合页函数),到底是求解哪个目标函数呢? (对合页损失函数不了解,可能问题问的不准,希望有人能帮忙解答)

问题3:



这什么意思? 既求解原始优化问题,又求解对偶优化问题? 这是为啥? 两个都求一遍,选个最好的么?

sklearn.svm.SVC







我们该使用哪种核函数?

回答:和数据相关。 可以尝试。尝试顺序一般:先线性核,然后再看通过使用非线性核能否提高。通常,如果数据是高维的,但只有很少的训练样本数,非线性核会导致过拟合。

除此之外,感兴趣的还可以参考这个:https://stats.stackexchange.com/questions/18030/how-to-select-kernel-for-svm?rq=1



图1 惩罚因子C对分类效果的影响。C越大,越要尽可能的考虑错误点(也就是说,尽量不要分错),导致的结果是,误分类尽可能越小,但分界距离也变小了。坏处很明显,若干错误的“离群点”会对分界面的位置方向影响很大。



图2 degree越大,分类器越灵活。太大会出现过拟合



图3 r越大,分类器越灵活。太大会出现过拟合。

sklearn.svm.NuSVC





下面是自己实验的一个结果:

数据是文本,类别10个,特征8千维,样本130.

LinearSVC效果最好。dual=False,C=10时达到:0.66多。

下面是SVC的效果:





可以看到核选择上,选择线性核是最好的。为什么其他两个核表现部署很好呢?

再poly和fdf两种核时的参数设置,基本可以得出以下结论:

1、degree和r设置稍微大一点,效果就非常非常差了。(尽管设置的小时也不是很好)。因为在样本数比特征数远远小于的时候,设置degree和r大更加容易导致过拟合。

2、degree和r设置不大,同时C设置的偏大时,效果还可以。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sklearn SVM
相关文章推荐