支持向量机(SVM)详解

支持向量机(Support Vector Machine, SVM)是一种常用于分类和回归的机器学习算法,因其优秀的泛化能力和数学理论基础,在数据挖掘、文本分类、人脸识别等任务中广泛应用。

1. SVM 基本概念

SVM 的核心思想是找到一个最优的超平面(Hyperplane),用于划分数据,使不同类别的数据点尽可能分开,并最大化间隔(Margin)

  • 超平面:在二维空间中,超平面是一条直线;在三维空间中,它是一个平面;在更高维度的空间中,仍称之为超平面。
  • 支持向量(Support Vectors):距离超平面最近的点,这些点决定了最优超平面的位置。
  • 间隔(Margin):支持向量到超平面的最小距离,SVM 试图最大化间隔,以提高泛化能力。

2. SVM 的数学原理

假设我们的数据集是线性可分的,给定训练样本 ( (x_i, y_i) ),其中 ( x_i ) 是特征向量,( y_i \in {-1, 1} ) 表示类别标签。

超平面的方程可以表示为:
[ w \cdot x + b = 0 ]
其中 ( w ) 是法向量,决定了超平面的方向,( b ) 是偏置项。

为了找到最优超平面,我们需要最大化间隔 ( \frac{2}{||w||} ),等价于最小化 ( ||w||^2 ),同时保证所有样本点被正确分类:

[ y_i (w \cdot x_i + b) \geq 1, \quad \forall i ]

这就是硬间隔 SVM 的优化问题。

2.1 软间隔 SVM

在现实数据中,可能存在部分噪声数据,使得严格的线性可分难以实现。因此,我们引入松弛变量 ( \xi_i ) 来允许一定的误分类:

[ \min \frac{1}{2} ||w||^2 + C \sum \xi_i ]

其中 ( C ) 是超参数,控制间隔最大化与误分类的权衡。

2.2 核函数(Kernel Trick)

当数据是非线性可分时,SVM 使用核函数(Kernel Function) 将数据映射到高维特征空间,使其在高维空间中线性可分。

常见核函数包括:

  • 线性核函数:( K(x_i, x_j) = x_i \cdot x_j )
  • 多项式核函数:( K(x_i, x_j) = (x_i \cdot x_j + c)^d )
  • 高斯径向基核(RBF 核):( K(x_i, x_j) = e^{-\gamma ||x_i - x_j||^2} )

3. SVM 的优缺点

优点

  • 适用于高维数据,尤其是文本分类等任务。
  • 通过核技巧处理非线性问题。
  • 具有良好的泛化能力。

缺点

  • 对于大规模数据集,训练时间较长。
  • 需要选择合适的核函数,否则可能导致过拟合。
  • 对噪声较敏感。

4. SVM 的 Python 实现示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score

# 加载数据集
iris = datasets.load_iris()
X, y = iris.data, iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 训练 SVM 模型
clf = SVC(kernel='rbf', C=1.0, gamma='scale')
clf.fit(X_train, y_train)

# 预测 & 评估
y_pred = clf.predict(X_test)
print("Accuracy:", accuracy_score(y_test, y_pred))
Contents
  1. 1. 1. SVM 基本概念
  2. 2. 2. SVM 的数学原理
    1. 2.0.1. 2.1 软间隔 SVM
    2. 2.0.2. 2.2 核函数(Kernel Trick)
  • 3. 3. SVM 的优缺点
  • 4. 4. SVM 的 Python 实现示例
  • |