支持向量机
支持向量机可以用于分类,也可以用于回归,因此在sklearn.svm中也分为两类:一类是分类的算法库,包括SVC,LinearSVC和NuSVC;另一类是回归的算法库,包括SVR,LinearSVR和NuSVR。由于NuSVC和NuSVR很少使用,不做介绍。
LinearSVC是线性分类,仅支持线性核函数,且用于多元分类时,只有‘ovr'这种方式;同理LinearSVR是线性回归。
from sklearn.svm import SVC,SVR,LinearSVC,LinearSVR
1.SVC和LinearSVC的参数
#SVC参数
C:惩罚参数。默认是1.0,C越小,正则化程度越大
kernel:核函数。四种选择,‘linear’即线性核函数, ‘poly’即多项式核函数, ‘rbf’即高斯核函数, ‘sigmoid’即sigmoid核函数。默认是高斯核。
gamma:核函数的参数,除线性核之外,都需要对该参数调参。若选择’rbf'核,则gamma对模型的影响:gamma较大,模型的支持向量变多,模型较复杂,容易过拟合,反之,容易欠拟合。
decision_function_shape:选择'ovr'或者‘ovo’,默认’ovo',OvO分类相对精确,但是分类速度没有OvR快。
#LinearSVC参数
C:惩罚参数。
penalty:'l1'或'l2'正则化,默认L2。
muti_class:处理多元分类时使用,只有’ovo'这种方式。
2.SVR和LinearSVR的参数
与SVC和LinearSVC的参数的不同点在于增加了距离误差参数epsilon,需要调参确定。
epsilon:误差参数,默认是0.1。当epsilon较大时,更多的点在间隔带内,没有损失,模型较简单;当epsilon较小时,模型会较复杂。
3.总结
①在训练之前需对数据进行归一化。
②当特征数很多,或者特征数远多于样本数时,可以使用线性核,比如文本分类问题中,特征数往往很多,使用线性核效果就很好,这是只需选择参数C即可。
③如果需要选择核函数进行非线性分类,一般是使用高斯核‘rbf',网格搜索最优的C和gamma组合。
④理论上高斯核不会比线性核差,但是这个理论却建立在要花费更多的时间来调参上。所以实际上能用线性核解决问题我们尽量使用线性核。
注意:在进行网格搜索时,一般C的参数搜索范围是[0.01,0.1,1,10],gamma的参数搜索范围[0.001,0.01,0.1,1]。