SVM 这种分类算法的精髓其实就在于那个“间隔”
很多人学 SVM 容易被那些复杂的数学公式绕晕,但只要盯着“最大化间隔(Maximum Margin)”这一点看,逻辑就通了。简单来说,SVM 不是在找一条能把数据分开的线,而是在找一条让两边数据点距离最远的“宽马路”。
下一篇
我的Hermes Agent实操笔记:解决AI“失忆”的问题 →
如果数据在二维空间里没法用直线分开,它最骚的操作就是通过核函数(Kernel Trick)把数据投射到更高维的空间。比如在平面上分不开的点,到了三维空间可能就刚好能用一个平面给切开。
我之前在写一个简单的文本分类 demo 时,对线性核和 RBF 核的选择一直没搞明白,结果模型在训练集上表现完美,测试集直接崩了。后来复盘才发现是过度拟合了,RBF 的 $\gamma$ 参数设得太高,导致模型在死磕每一个样本点,而不是学习泛化规律。
这里分享一个用 Python scikit-learn 实现 SVM 的基础配置,重点在于 C 和 gamma 的调优:
from sklearn import svm
from sklearn.model_selection import train_test_split
# 假设 X 是特征数据, y 是标签
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
# C 是惩罚系数,越大对误差容忍度越低,容易过拟合
# gamma 决定了单个样本的影响范围,越大模型越复杂
clf = svm.SVC(kernel='rbf', C=1.0, gamma='scale')
clf.fit(X_train, y_train)
print(f"测试集准确率: {clf.score(X_test, y_test)}")只要理解了高维映射和边际最大化,SVM 的数学推导其实挺有美感的。建议在实操时先从线性核开始试,如果效果不行再考虑 RBF,这样排查问题快得多。
