核心思想:最大间隔 (Maximum Margin)

对于线性可分的数据,SVM 的目标是找到一个超平面(在二维空间中就是一条直线)作为决策边界,这个超平面到两边最近的数据点(即支持向量)的距离是最大的。这就像在两个社区之间划出一条尽可能宽的“街道”,这条街道的宽度就是间隔 (Margin)

图示:

下图展示了两类数据点。SVM 找到了中间那条最优的决策边界,它由距离最近的几个“支持向量”(带黑边的点)所决定。

from sklearn.svm import SVC # X, y: 已知数据 X, y = ... # 创建线性核的 SVM 分类器 model = SVC(kernel='linear') model.fit(X, y) # model.support_vectors_ 可以查看支持向量

核函数 (Kernel Functions)

当数据线性不可分时(例如,一类数据被另一类包围),怎么办?核函数是 SVM 的“核武器”。它通过一个巧妙的数学变换,将数据映射到一个更高维的空间,使得原本不可分的数据变得线性可分。

动手试试:

下面的数据是线性不可分的。切换不同的核函数,观察决策边界如何变化以适应复杂的数据分布。

from sklearn.svm import SVC # X, y: 非线性数据 X, y = ... # 创建并训练带核函数的 SVM # kernel 可以是 'linear', 'poly', 'rbf' model = SVC( kernel='rbf', gamma='auto' # RBF 核的参数 ) model.fit(X, y)