scikit-learn中的SVM使用指南

本文主要包括以下内容:
1、 sklearn三个SVM分类器(sklearn.svm.LinearSVC,sklearn.svm.SVC,sklearn.svm.NuSVC)的参数详解
2、SVM算法调优的一些建议
3、实验

sklearn.svm.LinearSVC

scikit-learn中的SVM使用指南_第1张图片

penalty取值说明:
l1-SVM:
这里写图片描述
l2-SVM:

这里写图片描述

区别就是优化函数中的惩罚项中是松弛变量累加还是松弛变量平方累加。
关于这两者的比较,感兴趣的可以参考:
《 Comparison of L1 and L2 Support Vector Machines 》

关于dual,penalty和loss三个参数的组合:
scikit-learn中的SVM使用指南_第2张图片

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

问题2:如果合页损失函数和软间隔分类(考虑了松弛变量)是等价的,那在sklearn中,同时设置了penalty(松弛变量累加方式)和loss(合页函数),到底是求解哪个目标函数呢? (对合页损失函数不了解,可能问题问的不准,希望有人能帮忙解答)
问题3:
这里写图片描述
这什么意思? 既求解原始优化问题,又求解对偶优化问题? 这是为啥? 两个都求一遍,选个最好的么?

sklearn.svm.SVC

scikit-learn中的SVM使用指南_第3张图片
scikit-learn中的SVM使用指南_第4张图片

scikit-learn中的SVM使用指南_第5张图片

我们该使用哪种核函数?
回答:和数据相关。 可以尝试。尝试顺序一般:先线性核,然后再看通过使用非线性核能否提高。通常,如果数据是高维的,但只有很少的训练样本数,非线性核会导致过拟合。
除此之外,感兴趣的还可以参考这个:https://stats.stackexchange.com/questions/18030/how-to-select-kernel-for-svm?rq=1
scikit-learn中的SVM使用指南_第6张图片
图1 惩罚因子C对分类效果的影响。C越大,越要尽可能的考虑错误点(也就是说,尽量不要分错),导致的结果是,误分类尽可能越小,但分界距离也变小了。坏处很明显,若干错误的“离群点”会对分界面的位置方向影响很大。

scikit-learn中的SVM使用指南_第7张图片
图2 degree越大,分类器越灵活。太大会出现过拟合

scikit-learn中的SVM使用指南_第8张图片
图3 r越大,分类器越灵活。太大会出现过拟合。

sklearn.svm.NuSVC

scikit-learn中的SVM使用指南_第9张图片
这里写图片描述

下面是自己实验的一个结果:
数据是文本,类别10个,特征8千维,样本130.

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

下面是SVC的效果:
scikit-learn中的SVM使用指南_第10张图片
scikit-learn中的SVM使用指南_第11张图片
可以看到核选择上,选择线性核是最好的。为什么其他两个核表现部署很好呢?
再poly和fdf两种核时的参数设置,基本可以得出以下结论:
1、degree和r设置稍微大一点,效果就非常非常差了。(尽管设置的小时也不是很好)。因为在样本数比特征数远远小于的时候,设置degree和r大更加容易导致过拟合。
2、degree和r设置不大,同时C设置的偏大时,效果还可以。

你可能感兴趣的:(机器学习)