SVM算法调参(基于sklearn)
1. 简介
-
scikit-learn中SVM的算法库分为两类,一类是分类的算法库,包括SVC, NuSVC,和LinearSVC。另一类是回归算法库,包括SVR, NuSVR,和LinearSVR 。
-
SVM和NuSVM区别仅仅在于对损失的度量方式不同,NuSVM有一个参数来控制训练集训练的错误率或支持向量的百分比。
-
LinearSVM仅支持线性核函数,不支持各种低维到高维的核函数,对线性不可分的数据不能使用。
2. 核函数
-
线性核函数(Linear Kernel):表达式为:𝐾(𝑥,𝑧)=𝑥∙𝑧,普通的内积。LinearSVC 和 LinearSVR 只能使用它。
-
多项式核函数(Polynomial Kernel):表达式为:𝐾(𝑥,𝑧)=(𝛾𝑥∙𝑧+𝑟)𝑑 ,其中𝛾 𝑟 𝑑都需要自己调参,比较麻烦。线性不可分SVM常用的核函数之一。
-
高斯核函数(Gaussian Kernel):表达式为:𝐾(𝑥,𝑧)=𝑒𝑥𝑝(−𝛾||𝑥−𝑧||2), 其中𝛾大于0,需要自己调参。
在SVM中也称为径向基核函数(Radial Basis Function,RBF)是libsvm默认核函数,也是scikit-learn默认的核函数。非线性数据使用默认的高斯核函数会有比较好的效果。 -
Sigmoid核函数(Sigmoid Kernel)
表达式为:𝐾(𝑥,𝑧)=𝑡𝑎𝑛ℎ(𝛾𝑥∙𝑧+𝑟), 其中𝛾𝑟都需要自己调参。线性不可分SVM常用的核函数之一。
3. 参数理解
3.1 惩罚系数
理解为调节优化方向中两个指标(间隔大小,分类准确度)偏好的权重。
soft-margin SVM针对hard-margin SVM容易出现的过度拟合问题,适当放宽了margin的大小,容忍一些分类错误(violation),把这些样本当做噪声处理,本质上是间隔大小和噪声容忍度的一种trade-off,至于具体怎么trade-off,对哪个指标要求更高,那就体现在C这个参数上了。
当C趋于无穷大时,这个问题也就是不允许出现分类误差的样本存在,那这就是一个hard-margin SVM问题(过拟合)
当C趋于0时,我们不再关注分类是否正确,只要求间隔越大越好,那么我们将无法得到有意义的解且算法不会收敛。(欠拟合)
3.2 正则化参数penalty
设目标函数是要最小化的,所有参数组成向量w。
如果往目标函数上加上 ∣ ∣ ω ∣ ∣ ||\omega|| ∣∣ω∣∣(参数向量w的L1范数),这就是L1正则化;
如果往目标函数上加上 1 2 ∣ ∣ ω ∣ ∣ 2 \frac{1}{2}||\omega||^2 21∣∣ω∣∣2(参数向量w的L2范数的平方的一半),这就是L2正则化。
L1正则化的优点是优化后的参数向量往往比较稀疏;L2正则化的优点是其正则化项处处可导。