支持向量机(support vector machine,SVM)
- SVM是一个有监督学习算法,最常用于二分类任务,对线性分类和非线性分类都支持。
- 主要用于解决数据分类问题,它的目的是寻找一个超平面来对样本进行分割,分割的原则是间隔最大化(即数据集的边缘点到分界线的距离d最大,如下图),通常SVM用于二元分类问题,对于多元分类可将其分解为多个二元分类问题,再进行分类。所谓“支持向量”,就是下图中虚线穿过的边缘点。支持向量机就对应着能将数据正确划分并且间隔最大的直线(下图中红色直线)。
什么才是最优分类边界?什么条件下的分类边界为最优边界呢?
如图中的A,B两个样本点,B点被预测为正类的确信度要大于A点,所以SVM的目标是寻找一个超平面,使得离超平面较近的异类点之间能有更大的间隔,即不必考虑所有样本点,只需让求得的超平面使得离它近的点间隔最大。超平面可以用如下线性方程来描述:
w
T
x
+
b
=
0
w^T x + b = 0
wTx+b=0
其中,
x
=
(
x
1
;
x
2
;
.
.
.
;
x
n
)
x=(x_1;x_2;...;x_n)
x=(x1;x2;...;xn),
w
=
(
w
1
;
w
2
;
.
.
.
;
w
n
)
w=(w_1;w_2;...;w_n)
w=(w1;w2;...;wn),
b
b
b为偏置项. 可以从数学上证明,支持向量到超平面距离为:
γ
=
1
∣
∣
w
∣
∣
\gamma = \frac{1}{||w||}
γ=∣∣w∣∣1
为了使距离最大,只需最小化
∣
∣
w
∣
∣
||w||
∣∣w∣∣即可.就是优化
∣
∣
w
∣
∣
||w||
∣∣w∣∣
线性可分与线性不可分
① 线性可分
如果一组样本能使用一个线性函数将样本正确分类,称这些数据样本是线性可分的。
那么什么是线性函数呢?在二维空间中就是一条直线,在三维空间中就是一个平面,以此类推,如果不考虑空间维数,这样的线性函数统称为超平面。
② 线性不可分
如果一组样本,无法找到一个线性函数将样本正确分类,则称这些样本线性不可分。这幅图足以说明:一维不可分
二维不可分:
对于该类线性不可分问题,可以通过升维,将低纬度特征空间映射为高纬度特征空间,实现线性可分
那么问题来了,是如何将SVM能处理非线性可分的问题呢?这个时候就要用到核函数了。
核函数
通过名为核函数的特征变换,增加新的特征,使得低纬度线性不可分问题变维高纬度线性可分问题。如果低维空间存在K(x,y),x,y∈Χ,使得K(x,y)=ϕ(x)·ϕ(y),则称K(x,y)为核函数,其中ϕ(x)·ϕ(y)为x,y映射到特征空间上的内积,ϕ(x)为X→H的映射函数。只要特征足够多,维度足够多,总能吧线性不可分分为线性可分(升维)
线性核函数
线性核函数(Linear)表示不通过核函数进行升维,仅在原始空间寻求线性分类边界,主要用于线性可分问题
多项式核函数
多项式核函数(Polynomial Kernel)用增加高次项特征的方法做升维变换,当多项式阶数高时复杂度会很高,其表达式为:
K
(
x
,
y
)
=
(
α
x
T
⋅
y
+
c
)
d
K(x,y)=(αx^T·y+c)d
K(x,y)=(αxT⋅y+c)d
其中,α表示调节参数,d表示最高次项次数,c为可选常数。
model = svm.SVC(kernel="poly", degree=3) # 多项式核函数,degree=3多项式的最高次项为3
径向基核函数
径向基核函数(Radial Basis Function Kernel)具有很强的灵活性,应用很广泛。与多项式核函数相比,它的参数少,因此大多数情况下,都有比较好的性能。在不确定用哪种核函数时,可优先验证高斯核函数。由于类似于高斯函数,所以也称其为高斯核函数。表达式如下:
其中, α 2 α^2 α2越大,高斯核函数变得越平滑,即得到一个随输入x变化较缓慢,模型的偏差和方差大,泛化能力差,容易过拟合。 α 2 α^2 α2越小,高斯核函数变化越剧烈,模型的偏差和方差越小,模型对噪声样本比较敏感。
# 径向基核函数支持向量机分类器
model = svm.SVC(kernel="rbf",
gamma=0.01, # 概率密度标准差,描述数据分布的波动范围的
C=600) # 概率强度,该值越大对错误分类的容忍度越小,分类精度越高,但泛化能力越差;该值越小,对错误分类容忍度越大,但泛化能力强,错误的容忍率,超参数
核函数包括:线性核函数、多项式核函数、径向基核函数