支持向量机(SVM)是一种强大的监督学习算法,广泛应用于分类和回归问题中。其核心思想是通过找到一个超平面,使得不同类别的样本点被尽可能分开,同时保持最大的间隔。本文将重点介绍SVM中的两个关键概念:核函数与最大间隔分类。
SVM的核心目标是在特征空间中找到一个最优超平面,这个超平面能够最大化两类样本之间的间隔。间隔定义为距离超平面最近的样本点到超平面的距离。数学上,给定一组训练样本 $(x_i, y_i)$,其中 $x_i$ 是特征向量,$y_i$ 是类别标签(通常取值为+1或-1),SVM的目标是找到一个超平面:
$$ w \cdot x + b = 0 $$
其中,$w$ 是权重向量,$b$ 是偏置项。最优超平面满足以下条件:
这等价于最大化间隔 $\frac{2}{\|w\|}$,同时满足上述不等式约束。这可以通过求解一个凸二次规划问题来实现。
在现实中,很多数据集在原始特征空间中并不是线性可分的。为了解决这个问题,SVM引入了核函数(Kernel Function)的概念。核函数能够将输入数据映射到一个高维特征空间,在这个空间中数据变得线性可分。核函数的核心思想是计算两个输入向量在特征空间中的内积,而不需要显式地计算它们的映射。
常见的核函数包括:
通过选择合适的核函数及其参数,SVM可以处理各种复杂的非线性分类问题。
以下是一个使用Python和scikit-learn库实现SVM分类的简单示例:
from sklearn import svm
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
# 生成样本数据
X, y = make_blobs(n_samples=100, centers=2, random_state=6)
# 创建SVM分类器,使用RBF核
clf = svm.SVC(kernel='rbf', gamma=0.7, C=1.0)
clf.fit(X, y)
# 绘制决策边界
ax = plt.subplot(1, 1, 1)
xx, yy = np.meshgrid(np.linspace(-1, 1, 500),
np.linspace(-1, 1, 500))
Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
ax.contourf(xx, yy, Z, alpha=0.8)
ax.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k', marker='o')
ax.set_xlim((-1, 1))
ax.set_ylim((-1, 1))
plt.show()
支持向量机通过最大间隔分类和核函数的使用,在处理线性及非线性分类问题上展现出了强大的能力。通过深入理解这两个核心概念,可以更好地应用SVM算法解决复杂的分类问题。