引言
支持向量机(Support Vector Machine, SVM)是一种经典的监督学习算法,广泛应用于分类和回归问题。SVM 以其强大的数学基础和优异的性能在机器学习领域占据重要地位。本文将详细介绍 SVM 的原理、数学推导、应用场景以及 Python 实现。
一、什么是支持向量机(SVM)
支持向量机是一种二分类模型,其基本思想是找到一个超平面,将不同类别的数据分隔开,并且使得两类数据点到超平面的距离(即间隔)最大化。SVM 不仅可以处理线性可分问题,还可以通过核函数处理非线性可分问题。
二、SVM 的基本原理
SVM 的核心目标是找到一个最优超平面,使得两类数据点的间隔最大化。这个超平面可以表示为:$w^T x + b = 0$
其中,$w$ 是法向量,决定了超平面的方向;$b$ 是偏置项,决定了超平面的位置。
对于线性可分的数据,SVM 的目标是找到 $w$ 和 $b$,使得所有样本点满足:
其中,$y_i$ 是样本的标签(取值为 +1 或 -1),$x_i$ 是样本特征。
三、数学推导
1. 线性可分情况
对于线性可分的数据,SVM 的优化目标是最大化间隔。间隔的定义为:
因此,SVM 的优化问题可以转化为:
这是一个凸二次规划问题,可以通过拉格朗日乘子法求解。
2. 非线性可分情况
对于非线性可分的数据,SVM 引入松弛变量 $\xi_i$,允许部分样本点不满足约束条件。此时,优化问题变为:
其中,$C$ 是正则化参数,用于控制分类错误和间隔的平衡。
3. 核函数
对于非线性问题,SVM 通过核函数将数据映射到高维空间,使其在高维空间中线性可分。常用的核函数包括:
-
高斯核(RBF 核): $$K(x, z) = \exp(-\gamma ||x - z||^2)$$
-
多项式核: $$K(x, z) = (x^T z + c)^d$$
-
线性核: $$K(x, z) = x^T z$$
核函数的选择对 SVM 的性能有重要影响。


