模型训完了,准确率却一般——问题往往不在「学」,而在「事先设错了旋钮」。
那些旋钮叫超参数,网格搜索就是系统地拧它们的办法。
学网格搜索之前,必须先搞清机器学习里两类「参数」。很多人把它们混为一谈,后面就会卡在:「既然能用梯度下降学权重,为什么还要手动调参?」
训练过程中自动学出来的量。线性回归的斜率 w 与截距 b,神经网络里的权重矩阵,都是参数。你一般不手动改它们。
训练开始前就要定好的配置。决策树最大深度、学习率、正则强度 C、网络层数……它们决定「怎么学、学成什么样」,却不能靠普通梯度下降直接更新。
| 对比项 | 模型参数 | 超参数 |
|---|---|---|
| 谁来设定 | 算法从数据中学习 | 人(或搜索算法)事先指定 |
| 何时确定 | 训练过程中不断更新 | 训练开始前就固定 |
| 典型例子 | w、b、神经网络权重 | 学习率、max_depth、C |
| 能否梯度下降 | 可以(常见) | 通常不行,需另寻优化法 |
| 调错会怎样 | 训练失败 / 拟合不好 | 过拟合、欠拟合、训不动 |
参数回答「模型记住了什么」;超参数回答「模型按什么规则去记」。网格搜索管的是后者。
练着练着身体自己会调:重心、踩踏节奏。对应模型权重,靠练习(训练)自动形成。
座椅多高、轮胎气压、在平地还是坡道练——开练前就要定。定错了,怎么练都别扭。
列出几种座椅高度 × 几种气压,每种组合练一遍,挑最稳的那套。
以决策树为例:max_depth=2 可能太浅,学不到规律(欠拟合);max_depth=50 可能把噪声也背下来(过拟合)。中间某个深度往往最好——但这个「某个」没法从公式里一步算出。
靠直觉一个个试,容易漏掉好组合
别人很难重复你的「手感调参」过程
若用测试集来挑旋钮,成绩会虚高
网格搜索(Grid Search)是最直观的超参数优化策略:为每个超参数列出一组候选值,把它们交叉组合成网格,然后穷举评估每一个网格点,选出验证表现最好的那一组。
假设你要调一杯最合口味的咖啡,只有两个旋钮:
网格搜索会把全部 3 × 3 = 9 种组合都做一遍并品尝,最后挑最合口味的那一杯——绝不漏掉网格里的任何一点。
为每个要调的超参数列出候选列表
笛卡尔积交叉,形成多维「格子」
对每个格子训练模型并打分
选验证分数最高的那组配置
| 咖啡世界 | 机器学习 |
|---|---|
| 糖量候选 | 超参数 A 的候选值,如 max_depth ∈ {3, 5, 8} |
| 奶量候选 | 超参数 B 的候选值,如 learning_rate ∈ {0.01, 0.1, 0.3} |
| 尝一口打分 | 在验证集(或交叉验证)上算准确率 / F1 |
| 最合口味的那杯 | 验证分数最高的超参数组合 |
网格搜索 = 离散搜索空间上的暴力穷举。它不「聪明」,但在你划定的候选范围内保证不漏最优格点——这正是它简单却可靠的原因。
测试集应只在最终模型上用一次。若一边搜网格一边看测试集分数,信息会泄露:你等于「偷看答案再选题」,报告的成绩会虚高,上线后往往掉链子。
只切一次「训练 / 验证」,分数容易受这一刀运气影响。某一组超参数碰巧分到简单验证样本,就会被高估。
对网格上的每一组超参数:
最后比较各网格点的平均分,选出最高者;再用这组最佳超参数,在全部训练数据上重训,到独立测试集上做最终评估。
你可以试试:点击「开始搜索」,观察 3×3 网格被逐个评估;搜索结束后橙色格就是当前最优。再拖动「候选密度」,感受组合数如何指数膨胀。
准备就绪:将依次尝试糖量 × 奶量的 9 种组合。
候选网格上的每一点都会试到,不会「碰巧没抽到」最优格。
搜索空间固定,别人用同一网格能得到同一结论。
各网格点彼此独立,多核 / 多机可同时训。
超参数一多,或每个参数的候选一密,组合数就会指数爆炸。上面公式里 50,000 次训练,对大模型或大数据集往往不可接受。
进阶路径可以记成:网格穷举 → 随机采样 → 有记忆的智能搜索。
清洗、划分训练 / 测试
如随机森林、SVM、XGBoost
在训练集上搜最佳超参数
最佳配置全量重训,测一次