scikit-learn中的SVM使用指南
2017-09-04 20:03
393 查看
本文主要包括以下内容:
1、 sklearn三个SVM分类器(sklearn.svm.LinearSVC,sklearn.svm.SVC,sklearn.svm.NuSVC)的参数详解
2、SVM算法调优的一些建议
3、实验
![](http://img.blog.csdn.net/20170904193637318?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQWxsZW5hbGV4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
penalty取值说明:
l1-SVM:
![](http://img.blog.csdn.net/20170904193758908?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQWxsZW5hbGV4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
l2-SVM:
![](http://img.blog.csdn.net/20170904193822728?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQWxsZW5hbGV4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
区别就是优化函数中的惩罚项中是松弛变量累加还是松弛变量平方累加。
关于这两者的比较,感兴趣的可以参考:
《 Comparison of L1 and L2 Support Vector Machines 》
关于dual,penalty和loss三个参数的组合:
![](http://img.blog.csdn.net/20170904194132513?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQWxsZW5hbGV4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
问题:谁能解释下为什么有些(dual,penalty,loss)组合不行么?
问题2:如果合页损失函数和软间隔分类(考虑了松弛变量)是等价的,那在sklearn中,同时设置了penalty(松弛变量累加方式)和loss(合页函数),到底是求解哪个目标函数呢? (对合页损失函数不了解,可能问题问的不准,希望有人能帮忙解答)
问题3:
![](http://img.blog.csdn.net/20170904194438291?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQWxsZW5hbGV4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
这什么意思? 既求解原始优化问题,又求解对偶优化问题? 这是为啥? 两个都求一遍,选个最好的么?
![](http://img.blog.csdn.net/20170904194833356?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQWxsZW5hbGV4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20170904194853587?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQWxsZW5hbGV4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20170904194948880?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQWxsZW5hbGV4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
我们该使用哪种核函数?
回答:和数据相关。 可以尝试。尝试顺序一般:先线性核,然后再看通过使用非线性核能否提高。通常,如果数据是高维的,但只有很少的训练样本数,非线性核会导致过拟合。
除此之外,感兴趣的还可以参考这个:https://stats.stackexchange.com/questions/18030/how-to-select-kernel-for-svm?rq=1
![](http://img.blog.csdn.net/20170904195100692?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQWxsZW5hbGV4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
图1 惩罚因子C对分类效果的影响。C越大,越要尽可能的考虑错误点(也就是说,尽量不要分错),导致的结果是,误分类尽可能越小,但分界距离也变小了。坏处很明显,若干错误的“离群点”会对分界面的位置方向影响很大。
![](http://img.blog.csdn.net/20170904195148355?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQWxsZW5hbGV4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
图2 degree越大,分类器越灵活。太大会出现过拟合
![](http://img.blog.csdn.net/20170904195325673?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQWxsZW5hbGV4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
图3 r越大,分类器越灵活。太大会出现过拟合。
![](http://img.blog.csdn.net/20170904195438776?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQWxsZW5hbGV4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20170904195525864?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQWxsZW5hbGV4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
下面是自己实验的一个结果:
数据是文本,类别10个,特征8千维,样本130.
LinearSVC效果最好。dual=False,C=10时达到:0.66多。
下面是SVC的效果:
![](http://img.blog.csdn.net/20170904195751611?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQWxsZW5hbGV4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20170904195815542?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQWxsZW5hbGV4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
可以看到核选择上,选择线性核是最好的。为什么其他两个核表现部署很好呢?
再poly和fdf两种核时的参数设置,基本可以得出以下结论:
1、degree和r设置稍微大一点,效果就非常非常差了。(尽管设置的小时也不是很好)。因为在样本数比特征数远远小于的时候,设置degree和r大更加容易导致过拟合。
2、degree和r设置不大,同时C设置的偏大时,效果还可以。
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设置的偏大时,效果还可以。
相关文章推荐
- 机器学习实战之使用 scikit-learn 库实现 svm
- 支持向量机原理与实践(二):scikit-learn中SVM的使用
- Scikit-learn中使用SVM对文本进行分类
- scikit-learn SVM使用和学习
- 【机器学习】使用Scikit-Learn库的核SVM解决非线性问题
- 机器学习实践指南(二)—— 作为 baseline 的 SVM(scikit-learn)
- 25-在SCIKIT-LEARN中使用SVM
- scikit-learn 使用指南
- scikit-learn的主要模块和基本使用
- 【Scikit-Learn 中文文档】预测目标 (y) 的转换 - 数据集转换 - 用户指南 | ApacheCN
- 【Scikit-Learn 中文文档】大规模计算的策略: 更大量的数据 - 用户指南 | ApacheCN
- Python与机器学习1——scikit-learn使用的简易框架
- 【Scikit-Learn 中文文档】使用 scikit-learn 介绍机器学习 - scikit-learn 教程 | ApacheCN
- 【Scikit-Learn 中文文档】双聚类 - 无监督学习 - 用户指南 | ApacheCN
- 【Scikit-Learn 中文文档】模型评估: 量化预测的质量 - 模型选择和评估 - 用户指南 | ApacheCN
- 使用scikit-learn工具计算文本TF-IDF值
- 【Scikit-Learn 中文文档】四十三:使用 scikit-learn 介绍机器学习 - scikit-learn 教程 | ApacheCN
- 【Scikit-Learn 中文文档】新异类和异常值检测 - 无监督学习 - 用户指南 | ApacheCN
- 【Scikit-Learn 中文文档】大规模计算的策略: 更大量的数据 - 用户指南 | ApacheCN
- 【Scikit-Learn 中文文档】十七:概率校准 - 监督学习 - 用户指南 | ApacheCN