支持向量机 (Support Vector Machine, SVM)
SVM 是一种强大的监督学习模型,可用于分类和回归。它的核心思想是在数据点之间找到一个最优的“决策边界”。
核心思想:最大间隔 (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)