📅  最后修改于: 2023-12-03 15:26:32.988000             🧑  作者: Mango
支持向量机(Support Vector Machine,SVM)是一种非常常用的机器学习算法。它可以用于分类和回归问题,噪声较小的数据集上表现优秀。本文将介绍SVM的基本概念和常见应用。
假设有一个二分类问题,其数据集为$D={(x_1,y_1),(x_2,y_2),...,(x_n,y_n)}$,其中$x_i \in R^n$为样本特征,$y_i \in {-1,1}$为标签。若存在一个超平面$w^Tx+b=0$,可以将数据集$D$划分为两类,即
$$w^Tx_i+b > 0, y_i=1$$
$$w^Tx_i+b < 0, y_i=-1$$
这时我们称该数据集是线性可分的,超平面就是支持向量机的分类器。
最大间隔法是支持向量机的一种求解过程。对于线性可分的数据集$D$,分类超平面可以有无穷多个。但是最优的分类器应该满足离超平面最近的样本点到该平面的距离最大。换言之,最大化这个距离可以使得分类器具有最好的泛化性能。这个距离就是“间隔”。由于分类超平面可以通过方向向量$w$和截距$b$来表示,所以我们的目标就是最大化:
$$\frac{2}{|w|}$$
其中$|w|$为$w$的$L_2$范数。因为我们还要考虑到数据点与超平面之间的正负关系,因此我们的目标可以转化为最小化:
$$\frac{1}{2}|w|^2$$
需要注意的是,SVM中的优化问题是一个凸优化问题,存在唯一解。同时,这个解可以用约束条件表示为:
$$y_i(w^Tx_i+b)\geq1,i=1,2,...,n$$
其中$y_i$是样本的标签。
对于一些非线性可分的数据集,我们仍然可以使用支持向量机进行分类。这时,我们需要引入“松弛变量”来放松约束条件。相应地,我们的目标变成了最小化:
$$\frac{1}{2}|w|^2+C\sum_{i=1}^n{\xi_i}$$
其中$\xi_i$表示第$i$个样本对于分类器超平面约束条件的违反量,$C$为正则化参数,用于平衡分类错误和模型复杂程度之间的权重。
对于一些非线性可分的数据集,我们可以使用核函数进行特征转换,将数据映射到高维空间,在高维空间中找到一个线性可分的超平面。常用的核函数包括线性核、多项式核、高斯核等等。
支持向量机的应用非常广泛,包括:
以下为使用Python实现线性可分SVM的代码片段:
from sklearn import svm
# 准备数据
X = [[0, 0], [1, 1]]
y = [0, 1]
# 使用线性核函数
clf = svm.SVC(kernel='linear')
# 训练模型
clf.fit(X, y)
# 预测
print(clf.predict([[-0.1, -0.1]]))
print(clf.predict([[2, 2]]))
输出结果为:
[0]
[1]
这说明输入点$(-0.1,-0.1)$为第一类,$(2,2)$为第二类。