[机器学习复习笔记] SVM 支持向量机
SVM 支持向量机
1. 线性 SVM
1.1 线性可分问题
给定一个训练样本集 \(D = \{(x_1, y_1), (x_2, y_2), ... , (x_n, y_n)\}, \; y_i \in \{-1, +1\}\)。假设两个点集 \(D_0\) 和 \(D_1\),且 \(D_0 \subset D, D_1 \subset D\) , 若存在一个 \(d\) 维向量 \(w\) 和实数 \(b\),使得对于所有属于 \(D_0\) 的样本点 \(x_i\) 都有 \(wx_i + b > 0\) 同时 对于所有属于 \(D_1\) 的样本点 \(x_j\) 都有 \(wx_j + b < 0\),那么称 \(D_0\) 和 \(D_1\) 线性可分。
简单得说,就是最佳划分,能够使得 \(D\) 中的样本点分为两个类别。
1.2 划分超平面
有时候问题是二维甚至是多个维度的,而这样一个划分,通常被称为 划分超平面。在样本空间中,划分超平面 可通过如下线性方程去描述:
其中 \(w = [w_1; w_2; ... ; w_d]\) ,\(w\) 决定了超平面的方向;\(d\) 为偏移量,决定了超平面与原点之间的距离。
显然在样本空间 \(D\) 中的任意点 \(x\) 到超平面的距离可以用以下公式来描述:
记为 \((w, b)\)
其中 \(||w|| = \sqrt{\sum_{i=1}^{d}w_i^2}\),即向量的 L2 范数。
划分超平面 所产生的分类结果是最具鲁棒性的,对未见示例的泛化能力最强。
1.3 支持向量
假设超平面 \((w, b)\) 能够将训练集 \(D\) 进行正确分类,且有距离 \(\text{dist}\) ,使得每一个样本点 \((x_i, y_i) \in D\),当 \(y_i = +1\) 时,\(w^Tx + b \ge \text{dist}\) ;当 \(y_i = -1\) 时,\(w^Tx + b \le \text{dist}\) 。
由于 \(||w||\) 和 \(\text{dist}\) 都满足 大于 0(当然有可能时无限趋近于0的),可以令:
可以将上述方程组合并:
距离超平面 最近 的几个训练样本点使得上述不等式 等号成立,这些点被称为 支持向量 。
两个 不同类支持向量 到超平面的距离之和为:
\(\gamma\) 也被称之为 间隔 (\(\text{margin}\))
1.4 最大化间隔
\(\text{SVM}\) 要解决的,就是找到 最大间隔的划分超平面 \((w, b)\),即找到最优参数 \(w\) 和 \(b\) 使得 间隔 \(\gamma\) 最大。
形式化表述为:
显然,为了最大化间隔(\(\text{margin}\)),只需最大化 \(||w||^{-1}\),也即 最小化 \(||w||\)。
那么为了方便计算,我们往往会除去的根号,转换成 最小化 \(||w||^2\) 的最优化问题。可以形式化表述为:
这就是基本的 支持向量机 \(\text{SVM}\) (\(\text{Support} \; \text{Vector} \; \text{Machine}\)) 模型。
2. 对偶问题
2.1 拉格朗日乘子法求解SVM
前面了解了 最大间隔划分超平面,令:
对于上面的 最大化间隔 问题,也即 最小化 \(||w||^2\) 问题,使用 拉格朗日乘子法 得到其 对偶问题 (\(\text{dual} \; \text{problem}\))。
具体来说,对上面的问题中的每条约束添加 拉格朗日乘子 \(\alpha_i \ge 0\),则此问题的 拉格朗日函数 可写为:
其中 \(\alpha = [\alpha_1; \alpha_2, ... , \alpha_n]\)
令 \(L(w, b, \alpha)\) 对 \(w\) 和 \(b\) 的偏导为 \(\text{0}\):
可得
将上面的等式带入 \(L(w, b, \alpha)\)
由此可以得到 对偶问题:
解出 \(\alpha\) 后,求出 \(w\) 和 \(b\) 即可得到 最大间隔划分超平面:
对于对偶问题解出的 \(\alpha_i\),称为 \(L(w, b, \alpha)\) 中的 拉格朗日乘子,对应每一个样本 \((x_i, y_i)\)。
上述过程满足 \(\text{KKT}\) 条件:
对于任意样本 \((x_i, y_i) \in D\),总有 \(\alpha_i = 0\) 或者 \(y_if(x_i) = 1\)。
当 \(\alpha_i = 0\),则不会对 \(f(x_i)\) 造成任何影响;当 \(\alpha_i > 0\),此时必有 \(y_if(x_i) = 1\),即样本点在最大间隔的边界上,也就是一个 支持向量 。
3. 核函数 SVM
3.1 线性不可分问题
前面我们讨论了SVM求解线性可分问题,然而显示生活中,样本往往是 线性不可分的,即原本的样本空间不存在一个可以正确划分两类样本的划分超平面。
对于 线性不可分 问题,可以将样本空间映射到一个 更高维度 的空间,使得样本在此特征空间内线性可分。
原始样本空间是 有限维 的,那么 一定存在一个高维度空间使得样本可分。
3.2 对偶问题(线性不可分)
令 \(\phi(x)\) 为 \(x\) 映射到高维空间的特征向量,则 特征空间的划分超平面 可以表示为:
其对应的 对偶问题 为:
3.3 核函数
在上面求解式中涉及到计算 $\phi(x_i)^T\phi(x_j) $,由于特征空间维数可能很高,计算往往会非常困难。
所以这里可以设想一个函数:
即 \(x_i\) 和 \(x_j\) 在 特征空间的内积等于它们在原始的样本空间中通过 函数 \(\kappa\) 计算得出的结果。这就避免了高维度的计算。
由此 对偶问题 可以重写为:
求解后得到:
此处的 \(\kappa\) 其实就是所谓的 核函数。
然而一般情况下,我们不知道 \(\phi\) 的具体形式。我们有如下定理:
令 \(\chi\) 为输入空间,\(\kappa\) 为定义在 \(\chi \times \chi\) 的对称函数,则 \(\kappa\) 是 核函数 当且仅当 对于任意数据 \(D = \{x_1, x_2, ... , x_n\}\) ,核矩阵 (\(\text{kernel}\) \(\text{matrix}\)) \(K\) 总是半正定的:
只要一个对称函数对应的核矩阵半正定,其可作为 核函数 使用。
常用核函数:
- 线性核函数
- 多项式核函数
- 高斯核函数(也称径向基RBF函数)
- 拉普拉斯核函数*
- \(\text{sigmoid}\) 核函数*
上述的核函数,也可以通过线性组合等方式,组成新的核函数。
4. 软间隔 SVM
4.1 软间隔
在实际生活中,很少遇到可以完全线性可分的样本。那么如何解决这个问题呢?
此时我们引入 软间隔 (\(\text{soft} \; \text{margin}\)) 的概念。
在前面的讨论中,所有样本都必须划分正确,其实这称为 硬间隔 (\(\text{hard} \; \text{margin}\))。而 软间隔 允许 一些样本不满足 约束 \(y_i(w^Tx_i + b) \ge 1\)
当然,在最大化间隔的时候,应当让不满足的约束尽可能少。优化目标函数如下:
其中 \(C\) 是大于 \(0\) 的常数,\(\ell_{0/1}\) 是 0/1损失函数:
当 \(C\) 无穷大时,迫使所有样本均满足约束 \(y_i(w^Tx_i + b) \ge 1\); 当 \(C\) 为有限值,允许一些样本不满足约束。
4.2 替代损失函数
由于 \(\ell_{0/1}\) 非凸、非连续,数学性质不佳,使得求解困难,于是,往往会采用其他的函数代替 \(\ell_{0/1}\),称为 替代函数 (\(\text{surrogate} \; \text{loss}\))
常见的 替代函数:
- \(\text{hinge}\) 损失函数
- 指数损失函数
- 对率损失函数
如采用 \(\text{hinge}\) 损失函数,那么原来的优化目标函数可写为:
引入 松弛变量 (\(\text{slack} \; \text{variables}\)) \(\xi_i \ge 0\),可上式写为:
这就是常用的 软间隔支持向量机
4.3 对偶问题(软间隔)
对于每个样本,都有一个对应的松弛变量,所以此时还需要引入另外一个拉格朗日乘子 \(\mu_i\) 。通过拉格朗日乘子法得到软间隔SVM对应的拉格朗日函数:
其中拉格朗日乘子 \(\alpha_i \ge 0, \; \mu_i \ge 0\)
令 \(L(w, b, \xi, \alpha, \mu)\) 对 \(w\), \(b\), \(\xi_i\) 的偏导为 \(0\) 得:
由此可以得到对应的 对偶问题:
对于 软间隔支持向量机,\(\text{KKT}\) 条件要求:
对于任意训练样本 \((x_i, y_i)\),总有 \(\alpha_i = 0\) 或 \(y_if(x_i) = 1 - \xi_i\)。
若 \(\alpha_i = 0\),则该样本不会对 \(f(x_i)\) 产生任何影响;
若 \(\alpha > 0\),则必有 \(y_if(x_i) = 1 - \xi_i\),即该样本点为 支持向量。
若 \(\alpha_i < C\),则 \(\mu_i > 0\),进而有 \(\xi_i = 0\),即该样本正好在 最大间隔边界;
若 \(\alpha_i = C\),则 \(\mu_i = 0\),此时若 \(\xi_i \le 1\),则该样本落在 最大间隔内部,若 \(\xi_i > 1\) 则该样本被错误分类。
5. sklearn SVM 调用
import numpy as np
from sklearn import svm
from sklearn.model_selection import train_test_split
from sklearn.metrics import f1_score
X, y = ...
x_train,x_test,y_train,y_test = train_test_split(X,y,random_state=...)
model = svm.SVC(C=1.0, kernel='rbf')
model.fit(x_train, y_train)
# 预测结果
res = model.predict(x_test)
# 进行评估
print("F1: {0:.2f}".format(f1_score(res, y_test, average='micro')))
参考
《机器学习》 周志华
一切都是命运石之门的选择,本文章来源于博客园,作者:MarisaMagic,出处:https://www.cnblogs.com/MarisaMagic/p/17876283.html,未经允许严禁转载