支持向量机(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 | from sklearn import datasets |