你写 Python 挺熟,但一打开机器学习教程,满屏公式、损失函数、正则化,不知道哪一步是必须的、哪一步只是论文细节。这篇不铺公式,按「先跑通、再理解、最后调优」的顺序,把原理和代码动作一对一挂起来,告诉你每一步卡住时该查什么、什么时候这条路径不适用。
你写 Python 挺熟,但一打开机器学习教程,满屏公式、损失函数、正则化,不知道哪一步是必须的、哪一步只是论文细节。这篇不铺公式,按「先跑通、再理解、最后调优」的顺序,把原理和代码动作一对一挂起来。
目标很朴素:每一步卡住时你知道该查什么、该动哪个开关,以及什么时候这条路径不适用——比如你的数据只有几十行、或者标签本身就是错的,那再调模型也是浪费时间。
先把原理和代码动作对上号
别一上来啃推导。把「假设函数、损失函数、优化器」这三件套对应到代码里:模型对象是假设函数,评分指标是损失函数的通俗版,fit 过程就是优化器在跑。这样想一遍,训练在做什么就清楚了。
- 假设函数
- 你假设输入和输出长什么样关系的那个模型,比如线性回归就是一条直线
- 损失函数
- 衡量预测和真实差多远,训练的目标就是让它变小
- 优化器
- 按什么步子去调参数让损失降下来,步子大小就是学习率
- 参数
- 训练过程中模型自己学出来的东西,比如权重和偏置
- 超参
- 你手设的开关,比如学习率、树的深度,调参调的都是它
这里要分清参数和超参:后面所有「调参」动作动的都是超参,参数是模型自己学的,你手动改不了。搞混了就会对着权重瞎调。另外,「拟合能力」和「泛化能力」是判断模型好坏的第一道分水岭——训练集上分数高不代表新数据上也好。名词拿不准就去 /ai-dict/category/basics 和 /ai-dict/category/tech 对照,别硬猜。
一条最小可跑通的流程
先别追求最好。目标是让一条端到端的流程能跑起来,拿到一个你能解释的分数,再谈优化。下面这条顺序照着走就行。
- 切分数据训练/验证/测试三份分开。切分要固定随机种子,否则每次跑结果对不上,你会怀疑代码有 bug。
- 上基线模型先用最简单的线性模型或树模型,拿到一个能解释的分数。基线差不可怕,怕的是没有基线。
- 做特征工程缺失值处理、类别编码、量纲统一这三件事优先做。不做这三件,换什么模型都白搭。
- 再决定要不要上深度模型数据量和任务复杂度够不够,判断标准可参考 /guides/ml-vs-dl-project-picking,别一上来就上大网络。
很多人卡在「换模型」上,其实瓶颈常在特征。一个 5 人小团队做内部预测工具,特征没清干净,来回换了几轮算法,最后发现是缺失值填错了。先把这三件事做扎实。
| 环节 | 代码里对应什么 | 卡住时先查什么 |
|---|---|---|
| 数据切分 | train_test_split 之类 | 切分比例和随机种子是否固定 |
| 基线模型 | 最简单的模型对象 | 基线分数是否合理,有没有报错 |
| 特征工程 | 缺失值、编码、缩放 | 有没有漏掉某列,编码是否对得上 |
| 训练 | fit 调用 | 损失有没有在降,是不是没收敛 |
| 评估 | 评分指标 | 指标选得对不对,切分有没有泄漏 |
评估与调参的判断顺序
评估先看任务类型。分类和回归看的指标不一样;类别不平衡时准确率会骗人,这时候要看对少数类的识别情况。指标选错,后面调参全白费。
- 调参按「先粗后细」:学习率、正则强度这类影响大的先扫一遍,树的深度、叶子数这类枝叶参数最后动
- 训练好验证差就是过拟合:先加数据或加正则,别急着换模型
- 训练和验证都差:先查特征和标签,模型再换也没用
- 每次只动一个超参,同时动好几个你根本不知道是谁起的作用
想看当前各模型的公开表现口径,去 /benchmarks 和 /benchmarks/registry 翻当时的榜单,别拿旧印象下结论。榜单只能做参考,你的数据分布和它不一定一样,最终还得看自己验证集上的数字。
把练习固定成可复用的循环
调参最怕没记录。两周后你根本不记得哪个分数对应哪次改动。把每次实验固定成一个循环,练几次就顺了。
- 每份数据固定四步:先跑基线、再看错误样本、然后做单点改进、最后记录改动前后的分数
- 用笔记或实验记录表存下「改了什么、分数怎么变」,字段至少有时间、改动项、指标
- 拿不准用哪套工具链时,去 /ai-nav/category/ai-coding 和 /stacks 看目录再选
- 想补方法论,可对照 /guides/model-evaluation-selection,但先保证自己的流程闭环
错误样本分析往往是性价比最高的一步,比瞎调参有用。看看模型错在哪类样本上,往往能反推出特征缺了什么。
下一步把这条流程走一遍之前,先到 /tools/speed-test 看你常用的接口和工具链是否稳定,环境不稳会干扰你判断是模型问题还是网络问题。→常见问题
数学基础一般,能直接开始写机器学习代码吗
能,但要分清阶段。先跑通流程、能解释每个步骤在干嘛,这一步不太依赖推导。等到要理解为什么要加正则、损失函数为什么长这样,再回头补线性代数和概率,比一开始死磕公式效率高得多。
原理要学到多深才够用
够用的标准是:看到训练和验证分数不一致,你能说出可能是哪几个原因,并知道先试哪个动作。达不到就继续补;如果只是做业务里的小模型、调调现成接口,学太深反而拖慢进度,按需补就行。
跑出来效果很差,该先怀疑什么
先怀疑数据和评估,再怀疑模型。检查标签有没有错、训练测试有没有数据泄漏、指标选得对不对,这三项排查完通常能定位大部分问题。确认数据没问题再调参或换模型,顺序反了会浪费很多时间。