4. 高斯径向基核(RBF):带宽参数的影响、过拟合与欠拟合、实际调参经验
聊到核函数,RBF 绝对是个绕不开的角色。说实话,我入行头两年,大部分项目都是靠它撑着的。它好用,但也容易翻车。今天咱们就把它掰开揉碎了讲清楚。
4.1 RBF 到底长什么样?
先看公式,别怕,就一行:
K(x, y) = exp(-γ ||x - y||²)
这里 γ(gamma)就是带宽参数的倒数。γ 越大,高斯核的“作用范围”就越窄。你想想看,两个样本点之间的距离稍微拉开一点,相似度就急剧下降。反过来,γ 越小,每个点的影响力就能传得更远。
我个人习惯把 γ 理解成“放大镜的倍数”。倍数高了,细节看得清楚,但容易只见树木不见森林。
4.2 带宽参数 γ 的三种状态
我在项目中遇到过最典型的问题,就是 γ 没调好,模型直接崩了。咱们分三种情况来看:
| γ 取值 | 模型行为 | 实际表现 |
|---|---|---|
| γ 过大(如 100) | 每个样本只影响自己附近极小区域 | 训练集准确率接近 100%,测试集一塌糊涂 |
| γ 适中(如 0.1~1) | 样本影响范围合理,决策边界平滑 | 训练和测试误差都较低,泛化好 |
| γ 过小(如 0.001) | 所有样本互相影响,决策边界几乎是一条直线 | 训练误差高,模型欠拟合 |
说白了,γ 就是控制模型复杂度的旋钮。拧过头了过拟合,拧松了欠拟合。
4.3 过拟合与欠拟合的直观理解
咱们用个简单的二维分类问题来演示。假设数据是两个交错的半月形:
# 生成数据
from sklearn.datasets import make_moons
X, y = make_moons(n_samples=200, noise=0.15, random_state=42)
# 不同 gamma 下的 SVM 决策边界
from sklearn.svm import SVC
# gamma 过大 —— 过拟合
clf_over = SVC(kernel='rbf', gamma=100, C=1)
clf_over.fit(X, y)
# 训练集准确率 1.0,测试集可能只有 0.85
# gamma 适中 —— 好模型
clf_good = SVC(kernel='rbf', gamma=1, C=1)
clf_good.fit(X, y)
# 训练集 0.97,测试集 0.95
# gamma 过小 —— 欠拟合
clf_under = SVC(kernel='rbf', gamma=0.01, C=1)
clf_under.fit(X, y)
# 训练集 0.88,测试集 0.86
为什么会这样?我解释一下:γ=100 时,模型几乎把每个训练样本都圈成了一个小孤岛,决策边界弯弯曲曲,像一团乱麻。它把噪声也学进去了。γ=0.01 时,模型觉得所有点都差不多,直接画了条直线,根本分不开两个半月形。
核心结论:γ 越大,模型越复杂,越容易过拟合。γ 越小,模型越简单,越容易欠拟合。
4.4 实际调参经验
嗯,这里要注意,调参不是靠猜的。我这些年总结了一套比较稳的流程:
- 先粗调,再细调。 我一般先用 γ 在 [0.001, 0.01, 0.1, 1, 10, 100] 这个范围跑一遍,看看哪个区间表现好。
- 配合 C 参数一起调。 C 控制对误分类的惩罚力度。C 大,模型更“较真”,容易过拟合。C 小,模型更“宽容”。γ 和 C 是联动的,我习惯用网格搜索一起找。
- 用交叉验证打分。 别只看训练集准确率。我吃过这个亏——有一次训练集 99%,我高兴坏了,结果上线后被用户数据打得体无完肤。
我的小技巧: 如果数据量不大(几千条以内),直接用 sklearn 的 GridSearchCV,把 γ 和 C 的候选值扔进去,睡一觉起来就有结果了。数据量大时,改用 RandomizedSearchCV,省时间。
4.5 避坑指南
我曾经在一个金融风控项目里,把 γ 设成了 50,结果模型在训练集上完美区分了所有样本,包括几个明显的异常点。上线后,新来的正常用户被频繁误判为高风险。那次教训让我记住了:RBF 的 γ 一定要做缩放。
具体来说:
- 对特征做标准化(均值为 0,方差为 1),这是必须的。RBF 依赖距离计算,特征尺度不一致会出大问题。
- γ 的默认值通常是 1/n_features,但别迷信默认值。我见过很多项目用默认值效果很差。
- 如果数据有噪声,适当降低 γ 或者增大 C,让模型别太敏感。
警告: 不要直接用 γ=1 就跑。不同数据集的最优 γ 可能差好几个数量级。一定要做搜索。
4.6 知识体系图
下面这张图总结了 RBF 核的核心逻辑,我画出来方便你记忆:
这张图把 RBF 的核心逻辑串起来了。你从 γ 出发,往左是过拟合,往右是欠拟合,中间那条路才是我们想要的。调参就是找到那个“甜点”。
好了,关于 RBF 的带宽参数,咱们就聊到这儿。记住一句话:γ 不是越大越好,也不是越小越好,合适才好。 下次你调 SVM 的时候,试试我上面说的流程,应该能少走不少弯路。
想要更多资料,联系可可