支持向量机SVM算法原理:核函数与最大间隔分类

支持向量机(SVM)是一种强大的监督学习算法,广泛应用于分类和回归问题中。其核心思想是通过找到一个超平面,使得不同类别的样本点被尽可能分开,同时保持最大的间隔。本文将重点介绍SVM中的两个关键概念:核函数与最大间隔分类。

最大间隔分类

SVM的核心目标是在特征空间中找到一个最优超平面,这个超平面能够最大化两类样本之间的间隔。间隔定义为距离超平面最近的样本点到超平面的距离。数学上,给定一组训练样本 $(x_i, y_i)$,其中 $x_i$ 是特征向量,$y_i$ 是类别标签(通常取值为+1或-1),SVM的目标是找到一个超平面:

$$ w \cdot x + b = 0 $$

其中,$w$ 是权重向量,$b$ 是偏置项。最优超平面满足以下条件:

  • 对于所有 $y_i = +1$ 的样本点,有 $w \cdot x_i + b \geq 1$。
  • 对于所有 $y_i = -1$ 的样本点,有 $w \cdot x_i + b \leq -1$。

这等价于最大化间隔 $\frac{2}{\|w\|}$,同时满足上述不等式约束。这可以通过求解一个凸二次规划问题来实现。

核函数

在现实中,很多数据集在原始特征空间中并不是线性可分的。为了解决这个问题,SVM引入了核函数(Kernel Function)的概念。核函数能够将输入数据映射到一个高维特征空间,在这个空间中数据变得线性可分。核函数的核心思想是计算两个输入向量在特征空间中的内积,而不需要显式地计算它们的映射。

常见的核函数包括:

  • 线性核(Linear Kernel):$K(x_i, x_j) = x_i \cdot x_j$。
  • 多项式核(Polynomial Kernel):$K(x_i, x_j) = (\gamma x_i \cdot x_j + c)^d$。
  • 径向基函数核(RBF Kernel,也称为高斯核):$K(x_i, x_j) = \exp(-\gamma \|x_i - x_j\|^2)$。

通过选择合适的核函数及其参数,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算法解决复杂的分类问题。