支持向量机
文章目录
一、概念
支持向量机( S V M SVM SVM)是一种强大且广泛使用的机器学习算法,可以把它理解为是感知器的眼神。感知器算法的目标是把分类误差减少到最小,而支持向量机优化的目标是寻找最大化的边界。边界定义为 分离超平面(决策边界) 与其最近的训练样本之间的距离,即所谓的 支持向量。
S V M SVM SVM 是基于统计学习理论的一种机器学习方法。简单地说,就是将数据单元表示在多维空间中,然后在这个空间中对数据做划分的算法。
S V M SVM SVM 是建立在统计学习理论的 V C VC VC 维理论和结构风险最小原理基础上的,根据有限的样本信息在模型的复杂性之间寻求最佳折衷,以期获得最好的推广能力(或泛化能力)。所谓 V C VC VC 维是对函数类的一种度量,可以简单的理解为问题的复杂程度, V C VC VC 维越高,一个问题就越复杂。正是因为 S V M SVM SVM 关注的是 V C VC VC 维,因此 S V M SVM SVM 解决问题的时候,和样本的维数是无关的。(甚至样本是上万维的都可以,这使得 S V M SVM SVM 很适合用来解决文本分类的问题,当然也是因为因为引入了核函数)。
二、线性可分向量机
2.1 线性可分
S V M SVM SVM 就是试图把一根棍子放在最佳位置,以达到分类的目的,且让棍的两边有尽可能大的间隙,这个间隙就是球到棍的距离。
- 在保证决策面方向不变且不会出现错分样本的情况下移动决策面,会在原来的决策面两侧找到两个极限位置(越过该位置就会产生错分现象),如虚线所示。虚线的位置由决策面的方向和距离原决策面最近的几个样本的位置决定。而这两条平行虚线正中间的分界线就是在保持当前决策面方向不变的前提下的最优决策面。两条虚线之间的垂直距离就是这个最优决策面对应的分类间隔。
- 显然每一个可能把数据集正确分开的方向都有一个最优决策面(有些方向无论如何移动决策面的位置也不可能将两类样本完全分开),不同方向的最优决策面的分类间 隔通常是不同的,那个具有“最大间隔”的决策面就是SVM要 寻找的最优解。而这个真正的最优解对应的两侧虚线所穿过的样本点,就是 S V M SVM SVM 中的支持样本点,称为“支持向量”。
2.2 原理
2.2.1 数学建模
-
求解这个“决策面”的过程,就是最优化。一个最优化问题通常有两个基本的因素:
- 目标函数:也就是你希望什么东西的什么指标达到最好。
- 优化对象:你期望通过改变哪些因素来使你的目标函数达到最优。
-
在线性SVM算法中,目标函数显然就是那个“分类间隔”,而优化对象则是决策面。所以要对SVM问题进行数学建模,首先要对上述两个对象(“分类间隔”和“决策面”)进行数学描述。我们先描述决策面。
-
N 维空间的超平面方程可以表示为:
w T x + γ = 0 (1) w^Tx + \gamma = 0 \tag{1} wTx+γ=0(1)
2.2.2 约束条件
如图所示,以二维平面为例。要求解的是W的最大化。图中红颜色的圆点标记为1,规定其为正样本;蓝颜色的五星标记为-1,我们人为规定其为负样本。
假设决策面正好处于间隔区域的中轴线上,并且相应的支持向量对应的样本点到决策面的距离为d, 那么公式进一步写成:
{
W
T
x
i
+
γ
≥
1
∀
y
i
=
1
W
T
x
i
+
γ
≤
−
1
∀
y
i
=
−
1
(2)
\begin{cases} W^Tx_i + \gamma \ge 1 & \text{$\forall y_i = 1$} \\ W^Tx_i + \gamma \le -1 & \text{$\forall y_i = -1$} \end{cases} \tag{2}
{WTxi+γ≥1WTxi+γ≤−1∀yi=1∀yi=−1(2)
则约束条件为:
y
i
(
W
T
x
i
+
γ
)
≥
1
∀
x
i
(3)
y_i(W^Tx_i + \gamma) \ge 1 \;\text{$\forall x_i$} \tag{3}
yi(WTxi+γ)≥1∀xi(3)
目标函数:
d
=
∣
W
T
x
+
γ
∣
∣
∣
w
∣
∣
(4)
d = \frac{|W^Tx + \gamma|}{||w||} \tag{4}
d=∣∣w∣∣∣WTx+γ∣(4)
目标函数进一步简化(取临界线,则分子为1):
d
=
1
∣
∣
w
∣
∣
(5)
d = \frac{1}{||w||} \tag{5}
d=∣∣w∣∣1(5)
因为上述函数依然为非凸函数,所以对上述函数进行转换,转换成为一个凸函数。因为求解
d
d
d 的最大化问题,实际是
‖
w
‖
‖w‖
‖w‖ 的最小化问题。进而
‖
w
‖
‖w‖
‖w‖ 的最小化问题等效于:
m
i
n
∣
∣
w
∣
∣
2
2
(6)
min \frac{||w||^2}{2} \tag{6}
min2∣∣w∣∣2(6)
最终的目标函数和约束条件放在一起进行描述:
m
i
n
∣
∣
w
∣
∣
2
2
s
.
t
.
y
i
(
W
T
x
i
+
γ
)
≥
1
,
i
=
1
,
2
,
…
,
n
(7)
min\frac{||w||^2}{2} \\ s.t. \quad y_i(W^Tx_i + \gamma) \ge 1, \qquad \text{$i=1,\;2,\;\dots,\;n$} \tag{7}
min2∣∣w∣∣2s.t.yi(WTxi+γ)≥1,i=1,2,…,n(7)
2.2.3 拉格朗日函数优化
使用拉格朗日函数优化的目的:它将约束条件放到目标函数中,从而将有约束优化问题转换为无约束优化问题。
将有约束的原始目标函数转换为无约束的新构造的拉格朗日目标函数公式如下:
L
(
w
,
b
,
a
)
=
1
2
∣
∣
w
∣
∣
2
−
∑
i
=
1
n
a
i
(
y
i
(
w
T
x
i
+
b
)
−
1
)
(8)
L(w,\;b,\;a) = \frac{1}{2}||w||^2 - \sum\limits^n_{i=1}a_i(y_i(w^Tx_i + b) - 1) \tag{8}
L(w,b,a)=21∣∣w∣∣2−i=1∑nai(yi(wTxi+b)−1)(8)
其中
a
i
a_i
ai 是拉格朗日乘子,
a
i
a_i
ai 大于等于0,是构造新目标函数时引入的系数变量(我们自己设置)。令:
θ
(
w
)
=
max
a
i
≥
0
L
(
w
,
b
,
a
)
(9)
\theta(w) = \max\limits_{a_i \ge 0} L(w, b, a) \tag{9}
θ(w)=ai≥0maxL(w,b,a)(9)
当样本点不满足约束条件时,即在可行解区域外:
y
i
(
w
T
x
i
+
b
)
<
1
(10)
y_i(w^Tx_i + b) < 1 \tag{10}
yi(wTxi+b)<1(10)
将
a
i
设
a_i设
ai设 置为正无穷,此时
θ
(
w
)
\theta(w)
θ(w)显然也是正无穷。当样本点满足约束条件时,即在可行解区域内:
y
i
(
w
T
x
i
+
b
)
≥
1
(11)
y_i(w^Tx_i + b) \ge 1 \tag{11}
yi(wTxi+b)≥1(11)
此时,显然
θ
(
w
)
θ(w)
θ(w) 为原目标函数本身。将上述两种情况结合一下就是新的目标函数。
要求解的是最小化问题,所以一个直观的想法是如果能够构造一个函数,使得该函数在可行解区域内与原目标函数完全一致,而在可行解区域外的数值非常大,甚至是无穷大,那么这个没有约束条件的新目标函数的优化问题就与原来有约束条件的原始目标函数的优化问题是等价的问题。
对于 S V M SVM SVM来说可行域为: y i ( w T x i + γ ) ≥ 1 y_i(w^Tx_i + \gamma )\ge1 yi(wTxi+γ)≥1
非可行域为 y i ( w T x i + γ ) < 1 y_i(w^Tx_i + \gamma )<1 yi(wTxi+γ)<1
2.2.4 拉格朗日对偶
新的目标函数为:
θ
(
w
)
=
{
∣
∣
w
∣
∣
2
2
x
∈
可
行
区
域
+
∞
x
∈
非
可
行
区
域
(12)
\theta(w) = \begin{cases} \frac{||w||^2}{2} & \text{$x \in 可行区域$} \\ + \infty & \text{$x \in 非可行区域$} \end{cases} \tag{12}
θ(w)={2∣∣w∣∣2+∞x∈可行区域x∈非可行区域(12)
问题就变成了求新目标函数的最小值,即:
min
w
,
b
θ
(
w
)
=
max
a
i
≥
0
min
w
,
b
L
(
w
,
b
,
a
)
=
p
(13)
\min\limits_{w,b}θ(w) = \max\limits_{a_i\ge 0} \min\limits_{w, b} L(w, b, a) = p \tag{13}
w,bminθ(w)=ai≥0maxw,bminL(w,b,a)=p(13)
拉格朗日对偶优化: 新目标函数先求最大值,再求最小值。首先就要面对带有需求求解的参数
w
w
w 和
b
b
b 的方程,而
a
i
a_i
ai 又是不等式约束,这个求解过程不好做。所以需要使用拉格朗日函数对偶性,将最小和最大的位置交换一下,这样就变成了:
min
w
,
b
max
a
i
≥
0
L
(
w
,
b
,
a
)
=
d
(14)
\min\limits_{w, b}\max\limits_{a_i\ge 0}L(w, b, a) = d \tag{14}
w,bminai≥0maxL(w,b,a)=d(14)
交换以后的这个新的问题最优值用
d
d
d 来表示。而且
d
≤
p
d≤p
d≤p , 而我们真正需要关心的问题是
d
=
p
d=p
d=p 的时候, 即,拉格朗日对偶处理之后,我们的解没有改变。
L ( w , b , a ) = ∣ ∣ w ∣ ∣ 2 2 − ∑ i = 1 n a i ( y i ( W T x i + b ) − 1 ) L(w, b, a) = \frac{||w||^2}{2} - \sum\limits^n_{i=1}a_i(y_i(W^Tx_i+b) - 1) L(w,b,a)=2∣∣w∣∣2−i=1∑nai(yi(WTxi+b)−1)
上式可知,可以求得 L ( w , b , a ) L(w,b,a) L(w,b,a)的最大值,只需令后一项最小,即 a i a_i ai , 顾无法求最大值。因此需要拉格朗日对偶交换最大最小的位置。
2.2.5 KKT条件
若想得到 d = p d=p d=p,需要满足的条件是:
- 凸函数:进行凸优化
- K K T KKT KKT条件
K K T ( K a r u s h − K u h n − T u c k e r ) KKT(Karush-Kuhn-Tucker) KKT(Karush−Kuhn−Tucker) 条件是最优值条件必须满足以下条件:
- 经过拉格朗日函数处理之后的新目标函数 L ( w , b , a ) L(w,b,a) L(w,b,a) 对 a a a 求导为 0(即保证原目标函数 ∣ ∣ w ∣ ∣ 2 2 \frac{||w||^2}{2} 2∣∣w∣∣2 与限制条件 ∑ i = 1 n a i ( y i ( W T x i + b ) − 1 ) \sum\limits^n_{i=1}a_i(y_i(W^Tx_i + b) - 1) i=1∑nai(yi(WTxi+b)−1) 必须有交点,也即是必须要有解)
- h ( x ) = 0 h(x)=0 h(x)=0
- a ⋅ g ( x ) ≥ 0 a \cdot g(x) \ge 0 a⋅g(x)≥0
使用拉格朗日函数对目标函数进行了处理,生成了一个新的目标函数。通过一些条件可以求出最优值的必要条件,这个条件就是 K K T KKT KKT 条件。
K K T KKT KKT 条件,第一个条件就是要求限制条件必须要跟我们的可行域函数有交点。可以类似于正则化的理解,正则化的本质也是给定限制的区域进行运动。
第一步:首先固定
a
a
a,要让
L
(
w
,
b
,
a
)
L (w, b, a)
L(w,b,a) 关于
w
w
w 和
b
b
b 最小化,分别对
w
w
w 和
b
b
b 求偏导数,令其等于0, 即:
L
(
w
,
b
,
a
)
=
‖
w
‖
2
2
−
∑
i
=
1
n
a
i
(
y
i
(
w
T
x
i
+
b
)
−
1
)
(15)
L(w,b,a)= \frac{‖w‖^2}{2} − \sum\limits^n_{i=1}a_i(y_i(w^Tx_i +b)-1) \tag{15}
L(w,b,a)=2‖w‖2−i=1∑nai(yi(wTxi+b)−1)(15)
∂ L ∂ w = 0 ⟹ w = ∑ i = 1 n a i y i x i (16) \frac{\partial L}{\partial w} = 0 \implies w=\sum\limits_{i=1}^n a_iy_ix_i \tag{16} ∂w∂L=0⟹w=i=1∑naiyixi(16)
∂ L ∂ b = 0 ⟹ ∑ i = 1 n a i y i = 0 (17) \frac{\partial L}{\partial b} = 0 \implies \sum\limits_{i=1}^n a_iy_i=0 \tag{17} ∂b∂L=0⟹i=1∑naiyi=0(17)
将上述结果带回
L
(
w
,
b
,
a
)
L(w,b,a)
L(w,b,a),即求得内侧的最大值化,化简得:
L
(
w
,
b
,
α
)
=
∑
i
=
1
n
a
i
−
1
2
∑
i
=
1
n
a
i
a
j
y
i
y
j
x
i
T
x
j
(18)
L(w,b,α)=\sum\limits_{i=1}^n a_i -\frac{1}{2}\sum\limits_{i=1}^n a_ia_jy_iy_jx_i^Tx_j \tag{18}
L(w,b,α)=i=1∑nai−21i=1∑naiajyiyjxiTxj(18)
第二步:现在内侧的最大值求解完成,再求解外侧的最小值,从上式可以得到:
max
a
∑
i
=
1
n
a
i
−
1
2
∑
i
=
1
n
a
i
a
j
y
i
y
j
x
i
T
x
j
s
.
t
.
a
i
≥
0
,
i
=
1
,
2
,
…
,
n
∑
i
=
1
n
a
i
y
i
=
0
(19)
\max\limits_a \sum\limits_{i=1}^n a_i − \frac12 \sum\limits_{i=1}^n a_ia_jy_iy_jx_i^Tx_j \\ s.t. \quad a_i≥0,i=1,2,\dots,n \\ \sum\limits_{i=1}^n a_iy_i=0 \tag{19}
amaxi=1∑nai−21i=1∑naiajyiyjxiTxjs.t.ai≥0,i=1,2,…,ni=1∑naiyi=0(19)
第三步:优化问题已经化简到上式的形式,对于这个问题,有更高效地优化算法,即序列最小优化(
S
M
O
SMO
SMO )算法。通过这个优化算法能得到
a
a
a,再根据
a
a
a,就可以解出
w
w
w 和
b
b
b,进而求得最初的目的:找到超平面,即“决策平面”。
1996年, J o h n P l a t t John \; Platt JohnPlatt发布了一个称为 S M O SMO SMO 的强大算法,用于 训练 S V M SVM SVM。 S M SM SM表示序列最小化( S e q u e n t i a l M i n i m a l O p t i m i z a i o n Sequential \; Minimal \; Optimizaion SequentialMinimalOptimizaion)。 P l a t t Platt Platt 的 S M O SMO SMO 算法是将大优化问题分解为多个小优化问题来求解的。这些小优化问题往往很容易求解,并且对它们进行顺序求解的结果与将它们作为整体来求解 的结果完全一致的。在结果完全相同的同时, S M O SMO SMO算法的求解时间短很多。
S M O SMO SMO 算法的目标是求出一系列 a a a 和 b b b ,一旦求出了这些 a a a,就很容易计算出权重向量 w w w 并得到分隔超平面。
S M O SMO SMO 算法的工作原理是:每次循环中选择两个 a a a 进行优 化处理。一旦找到了一对合适的 a a a,那么就增大其中一 个同时减小另一个。这里所谓的”合适”就是指两个 a a a 必须符合以下两个条件,条件之一就是两个 a a a必须要在 间隔边界之外,而且第二个条件则是这两个 a a a 还没有进 进行过区间化处理或者不在边界上。
2.3 实现
依然以鸢尾花分类为例:
import numpy as np
from sklearn.svm import SVC
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.feature_selection import chi2, SelectKBest
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
from pylab import *
mpl.rcParams['font.sans-serif'] = ['SimHei']
绘制决策边界:
def plot_decision_regions(X, y, classifier, test_dix=None, resolution=0.02):
markers = (
's', 'x', 'o', '^', 'v'
)
colors = (
'r', 'b', 'g', 'c', 'y'
)
cmap = ListedColormap(colors[: len(np.unique(y))])
x1_min, x1_max = X[:, 0].min() - 1, X[:, 0].max() + 1
x2_min, x2_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, resolution),
np.arange(x2_min, x2_max, resolution))
Z = classifier.predict(np.array([xx1.ravel(), xx2.ravel()]).T)
Z = Z.reshape(xx1.shape)
plt.contourf(xx1, xx2, Z, alpha=.3, cmap=cmap)
plt.xlim(xx1.min(), xx1.max())
plt.ylim(xx2.min(), xx2.max())
for idx, c1 in enumerate(np.unique(y)):
plt.scatter(x=X[y == c1, 0], y=X[y == c1, 1],
alpha=.9, c=colors[idx],
marker=markers[idx], label=c1,
edgecolors='black')
if test_dix:
X_test, y_test = X[test_dix, :], y[test_dix]
plt.scatter(X_test[:, 0], X_test[:, 1],
edgecolors='black',
alpha=1, linewidths=1, marker='o',
s=100, label='test set')
训练模型(为了方便可视化仅保留两个特征):
svm = SVC(kernel='linear', random_state=1)
X, y = load_iris(return_X_y=True)
X = SelectKBest(chi2, k=2).fit_transform(X, y)
ss = StandardScaler()
ss.fit(X)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)
X_train, X_test = ss.transform(X_train), ss.transform(X_test)
svm.fit(X_train, y_train)
X_all = np.vstack((X_train, X_test))
y_all = np.hstack((y_train, y_test))
plot_decision_regions(X_all, y_all, svm, range(105, 150))
plt.xlabel('花瓣长度(标准化)')
plt.ylabel('花瓣宽度(标准化)')
plt.legend(loc='upper left')
三、线性不可分向量机
3.1 线性不可分
可能出现这样一种情况,找不到一个超平面可以较好的分割两类数据,如下:
这时,我们可以采取一种特别的方法,把两类数据看成两种不同密度的小球,此时,桌子一拍,求飞到空中。然后,用一张纸插到两种球的中间。
球叫做 d a t a data data, 把棍子叫做分类器 ( c l a s s i f i e r ) (classifier) (classifier), 找到最大间隙的窍门 ( t r i c k ) (trick) (trick) 叫做最优化 ( o p t i m i z a t i o n ) (optimization) (optimization), 拍桌子叫做核函数 ( k e r n e l ) (kernel) (kernel), 那张纸叫做超平面 ( h y p e r p l a n e ) (hyperplane) (hyperplane)。
当一个分类问题,数据是线性可分的,也就是用一根棍就可以将两种小球分开的时候,我们只要将棍的位置放在让小球距离棍的距离最大化的位置即可,寻找这个最大间隔的过程,就叫做最优化。
但是,现实往往是很残酷的,一般的数据是线性不可分的,也就是找不到一个棍将两种小球很好的分类。这个时候,我们就需要像大侠一样,将小球拍起,用一张纸代替小棍将小球进行分类。想要让数据飞起,我们需要的东 西就是核函数( k e r n e l kernel kernel),用于切分小球的纸,就是超平面。
3.2 核函数
3.2.1 核函数引入
基本作用是接受两个低维空间里的向量,能够计算出经过某个变换后在高维空间里的向量的内积。因此只需要在输入空间内就可以进行特征空间的内积。
拿到非线性数据,就找一个映射 Φ ( ⋅ ) \Phi(\cdot) Φ(⋅),然后一股脑把原来的数据映射到新空间,再做线性 S V M SVM SVM 即可。但是在之前对一个二维空间做映射,选择的新空间是原始空间的所有一阶和二阶的组合,得到了五个维度;但如果原始空间是三维,我们就会得到19维的新空间,这个数目是呈爆炸性增长的,这给映射的计算带来了很大困难,而且如果遇到无穷维的情况,就根本无从计算了,所以就需要核函数出马了。
核函数的解释:也就是说,尽管给的问题是线性不可分的,但是应当它为线性问题来求解,只不过求解的过程中,凡是要求内积的时候就用选定的核函数来算。这样求出来的α再和选定的核函数一组合就是分类器了。
3.2.2 常见核函数
线性核函数(
l
i
n
e
a
r
linear
linear):直接返回输入向量的点积,速度最快。因为实际没有升维,适用于本身特征维度较高,样本数据量很大的场景。
K
(
X
,
X
i
)
=
(
X
⋅
X
i
)
(20)
K(X, X_i) = (X\cdot X_i) \tag{20}
K(X,Xi)=(X⋅Xi)(20)
主要用于线性可分的情况,我们可以看到特征空间到输入空间的维度是一样的,但是其参数减少速度快,对于线性可分数据,其分类效果很理想且效率更高。因此我们通常首先使用线性核函数来做分类,如果不行再换用其他核函数。
多项式核(
P
o
l
y
n
o
m
i
a
l
Polynomial
Polynomial):
s
、
c
、
d
s、c、d
s、c、d 为超参数
K
(
X
,
X
i
)
=
(
s
(
X
⋅
X
i
)
+
c
)
d
(21)
K(X, X_i) = (s(X\cdot X_i) + c)^d \tag{21}
K(X,Xi)=(s(X⋅Xi)+c)d(21)
多项式核函数可以实现将低维的输入空间映射到高维的特征空间,但是多项式核函数的参数多,当多项式的阶数比较高的时候,核矩阵的元素值将趋于无穷大或者无穷小,计算复杂度是会大到无法计算(线性核函数可以看作多项式核函数的一种)。
高斯径向基核
(
G
a
u
s
s
i
a
n
r
a
d
i
c
a
l
b
a
s
i
s
f
u
n
c
t
i
o
n
k
e
r
n
e
l
)
(Gaussian \; radical \; basis \; function \; kernel)
(Gaussianradicalbasisfunctionkernel):应用最广泛的
S
V
M
SVM
SVM 核,
γ
\gamma
γ 超参数值越大越容易过拟合
K
(
X
,
X
i
)
=
exp
(
−
γ
∣
X
−
X
i
∣
2
)
(22)
K(X,X_i) = \exp(-\gamma|X-X_i|^2) \tag{22}
K(X,Xi)=exp(−γ∣X−Xi∣2)(22)
在常用的核函数中,使用最广泛的就是 R B F RBF RBF核,无论低维、高维、小样本、大样本等情况, R B F RBF RBF 核都适用,具有较宽的收敛域,是较理想的分类依据函数。
Sigmoid核函数 :
s
、
c
s、c
s、c 为超参数,采用该核函数支持向量机就是一种多层神经网络。
K
(
X
,
X
i
)
=
t
a
n
h
(
s
(
X
,
X
i
)
+
c
)
t
a
n
h
(
x
)
=
e
x
−
e
−
x
e
x
+
e
−
x
(23)
K(X,X_i) = tanh(s(X,X_i) + c) \\ tanh(x) = \frac{e^x-e^{-x}}{e^x + e^{-x}} \tag{23}
K(X,Xi)=tanh(s(X,Xi)+c)tanh(x)=ex+e−xex−e−x(23)
t
a
n
h
tanh
tanh 函数是深度学习、神经网络中比较常见的一个激活函数,关于这个函数具体知识参见我的 全连接神经网络
核函数的引入避免了“维数灾难”,大大减小了计算量。而输入空间的维数n对核函数矩阵无影响,因此,核函数方法可以有效处理高维输入。
无需知道非线性变换函数 Φ \Phi Φ 的形式和参数。
核函数的形式和参数的变化会隐式地改变从输入空间到特征空间的映射,进而对特征空间的性质产生影响,最终改变各种核函数方法的性能。
核函数方法可以和不同的算法相结合,形成多种不同的基于核函数技术的方法,且这两部分的设计可以单独进行,并可以为不同的应用选择不同的核函数和算法。
3.3 Python 中的 SVM
在 sklearn.svm
中提供了三种分类 / 回归 封装类:
SVC / SVR
:最普通的 S V M SVM SVM 分类器 / 回归器,可以通过kernel
参数设置使用的核函数,使用C
参数配置松弛因子。NuSVC / NuSVR
:带有nu
参数的分类器 / 回归器,nu
参数的作用与C
参数类似,都是用来配置模型对训练数据的拟合程度的。LinearSVC / LinearSVR
:使用liblinear
库的线性核函数分类器回归器,其在模型中加入了线性回归惩罚参数
参数 | 解释 | SVC / SVR | NuSVC / NuSVR | LinearSVC / LinearSVR |
---|---|---|---|---|
C | 松弛因子,取 0 → ∞ 0 \to \infty 0→∞ | √ | √ | |
kernel | 核函数名称 | √ | √ | |
degree | 多项式核函数的维度参数 | √ | √ | |
gamma | poly、rbf、sigmoid 三种核的超参数 | √ | √ | |
tol | S M O SMO SMO 算法中的停止阈值 | √ | √ | √ |
nu | 取值 0 ~ 1,控制对训练数据的拟合程度 | √ | ||
penalty | 线性模型惩罚项, L 1 或 L 2 L1 或 L2 L1或L2 | √ |