资讯动态

机器学习前两章才是分水岭:从概念到线性回归的完整闭环

发布时间:2026/10/21 23:33:57 来源:尧图企业网站定制
1. 为什么前两章才是机器学习真正的分水岭我接触机器学习的经历可能和不少人有重合先是被人工智能深度学习这些词吸引急着想跑通一个图像识别的Demo觉得那才叫做项目。结果真正翻开教材前两章全是概念、数学和基础流程枯燥得像说明书好几次差点放弃。但等到我后来真的去参加比赛、给业务方做方案时才发现前两章没吃透的人后面基本都在还债。模型跑不通不知道是数据问题还是特征问题训练集效果很好、上线就崩不知道是过拟合还是采样偏了甚至别人问一句你这个任务为什么用监督学习而不是无监督都答不上来。这些全部是第一二章就埋下的地基。这篇文章适合两类人一类是刚开始学机器学习、需要把前两章真正吃透而不是简单翻一遍的初学者另一类是已经上手过一些模型、但总感觉知识是拼凑起来的想回头补地基的从业者。我会结合自己踩过的坑把这两章里最容易被忽略、但对后续影响最大的内容拆开讲清楚。2. 第一章的核心不是定义而是三个分类焦虑大部分教材第一章会给机器学习的标准定义比如从数据中自动学习规律并用于预测或决策。定义背下来很简单但真正需要解决的是三个分类问题我称之为分类焦虑——因为几乎每个初学者都会在这个地方反复纠结。2.1 监督、无监督、强化先看有没有标准答案监督学习是最常见的核心特征是训练数据里带有标签。用人话说就是你告诉模型这个东西是什么或者这个值是多少。比如判断一封邮件是不是垃圾邮件每封邮件都标好了是/否模型学的就是输入到标签之间的映射关系。分类和回归都属于监督学习。无监督学习正好相反数据里没有任何标签模型要自己发现结构。最常见的场景是客户分群——你不提前告诉系统这些人属于哪个类型它自己把行为相似的用户聚到一起。聚类、降维都属于这一类。强化学习稍微特殊一点它既不是给标准答案也不是纯粹找结构而是通过试错奖励来学习策略。比如下棋程序赢棋给正奖励输棋给负奖励模型自己摸索哪步棋更容易赢。我见过很多初学者卡在这个任务到底属于哪类上。有个很实用的判断方法如果数据里有你希望模型预测的正确答案那就是监督学习如果只是给定一堆数据没有明确目标变量那就是无监督。比如用户流失预测——你有历史数据里哪些用户流失了这个标签所以是监督学习里的分类问题。而用户画像分析——只有用户行为记录没有你属于哪一类人的标签那大概率是无监督。2.2 分类与回归别只看输出还要看业务诉求分类和回归都属于监督学习区别看似简单输出离散值是分类输出连续值是回归。但实际业务里经常有模棱两可的情况这时候要考虑的是业务到底需要什么而不是数学上能做什么。比如预测房价输出是一个具体金额显然是回归。但如果你只是想判断这个房子值不值得买——比如500万以下算便宜、以上算贵——那本质上是分类问题只不过把连续值做了阈值切分。再举个例子我做过一个预测设备故障的项目。业务方一开始说我们要预测设备还能用多久听起来是回归。但聊深了发现他们真正要做的是维护排期——只需要知道这台设备未来一周内会不会出故障那就简化成了二分类。输出维度越简单模型越好训练业务也越好落地。别被数据的原始形态绑架回到业务诉求去定义问题类型。2.3 泛化能力这是第一章最该记住的词但几乎没人真正理解教材里会讲机器学习的目的是让模型在新数据上表现好而不只是记住训练数据。这句话听起来像废话但它是整个机器学习最核心的矛盾模型既要足够复杂才能学到规律又不能太复杂以至于连噪声都背下来了。我的理解是泛化能力约等于模型面对没见过的情况时的应对水平。比如一个学生平时做练习册每次都全对但一考试就崩这就是泛化差——他把题目和答案背下来了而不是掌握了规律。模型也是一样的训练集是练习册测试集是考试卷真正衡量水平的一定是考试卷。第一章里关于训练集、验证集、测试集的划分逻辑本质就是为了公平地考试。训练集是教材验证集是模拟考——用来调超参数、选模型测试集是最终的高考——只能考一次绝对不能提前透题。很多新手包括当年的我会把测试集反复拿来调参这就是典型的考试透题结果就是线下指标很好看线上表现一塌糊涂。3. 第一章到第二章之间最容易断层的是数学基础很多教程会把数学放到第一章讲但大部分初学者在这一步就放弃了。我觉得问题不在于数学难而在于不知道学这个到底有什么用。所以我换个方式直接说第二章里你会用到哪些数学它们各自在干嘛。3.1 线性代数你在算的其实都是变换机器学习里最常见的操作是矩阵乘法比如线性回归的闭式解 (w (X^TX)^{-1}X^Ty)就是一个纯矩阵运算。但更直观的理解方式是矩阵乘以向量本质是对这个向量做了一次空间变换——旋转、缩放、投影。神经网络里一层一层的计算就是数据在高维空间里不断被变换最终变换到能分类的区域。如果你暂时理解不了这么深至少要掌握几点矩阵乘法的维度规则前一个的列数必须等于后一个的行数、转置和逆的意义、以及特征矩阵 (X) 的形状——通常是样本数 × 特征数每一行是一个样本每一列是一个特征。后面所有公式推导都建立在这个约定上。3.2 概率论机器学习本质上是在算不确定性第二章会引入的概念里条件概率、贝叶斯公式、期望、方差每一个都直接对应机器学习的某个操作。朴素贝叶斯分类器就是在算给定特征下属于每个类别的概率然后选概率最大的那个最大似然估计的本质是找一组参数让当前这批数据出现的概率最大。我举个非常直白的例子。假设你看到一个背影长发、穿裙子的概率是70%你判断对方是女性——这就是朴素贝叶斯的思路用特征去更新你之前的判断先验概率得到新的判断后验概率。机器学习的很多分类器内核都是这个逻辑只不过特征更多、计算更复杂。3.3 微积分与最优化梯度下降就是从下山悟出来的第二章一般会开始讲第一个具体的算法线性回归和它的求解方式。老式教材会教你用最小二乘法求解析解但现实中特征一多、数据量一大直接求逆矩阵就不现实了所以更通用的是梯度下降法。梯度下降的思想特别像蒙眼下山你站在山坡上不知道最低点在哪但你能感觉到脚底下哪个方向是下坡就沿着下坡走一步每走一步重新感知方向再走一步直到走到感觉不到下坡为止。这里的感觉下坡就是计算梯度走一步就是更新参数步长就是学习率。第二章里所有的公式推导最终都会回到一个目标找到让损失函数最小的那组参数。理解了这条主线数学就不会显得是一堆零散知识而是一条完整的逻辑链——用概率描述不确定性用线性代数表达数据变换用微积分求变化方向用优化方法找到最优解。4. 第二章实操线性回归从公式到代码的完整链路第二章最核心的算法通常是线性回归。我当时花了很多时间才把公式推导和代码实现对应起来这里我把这条链路完整走一遍你可以直接照着复现。4.1 先理解损失函数为什么是误差平方和线性回归的目标是找到一条直线或超平面(y wx b)让预测值和真实值尽量接近。接近怎么量化最常用的是均方误差MSE[ MSE \frac{1}{n}\sum_{i1}^{n}(y_i - \hat{y}_i)^2 ]为什么要用平方而不是直接用误差绝对值两个原因。第一平方之后误差被放大了大的偏差会得到更大的惩罚模型会优先修正那些错得离谱的样本第二平方函数处处可导方便用梯度下降求解而绝对值函数在零点不可导优化起来很麻烦。4.2 梯度下降的每一步都在干什么用梯度下降求解线性回归时核心就两个公式损失函数对 (w) 的偏导和对 (b) 的偏导。对多元回归来说写成矩阵形式更简洁。假设损失函数是 (J(w) \frac{1}{2n}(Xw - y)^T(Xw - y))那梯度就是[ \nabla J(w) \frac{1}{n}X^T(Xw - y) ]每次迭代就是(w w - \alpha \nabla J(w))其中 (\alpha) 是学习率。整个训练过程用伪代码描述就是初始化参数 → 计算预测值和真实值的差 → 用这个差更新参数 → 重复到损失不再明显下降。下面用一个简单代码演示全过程。4.3 一份可以直接跑的最小实现我习惯用Python的NumPy手写一遍核心逻辑不用任何现成的机器学习库这样能确保自己真的懂每一步在干嘛。import numpy as np import matplotlib.pyplot as plt # 生成模拟数据: y 2x 1 噪声 np.random.seed(42) X np.random.rand(100, 1) * 10 # 100个样本, 1个特征 true_w, true_b 2.0, 1.0 y true_w * X true_b np.random.randn(100, 1) * 1.5 # 初始化参数 w np.random.randn(1, 1) b 0.0 learning_rate 0.01 epochs 500 # 梯度下降 for epoch in range(epochs): y_pred X w b # 预测值 error y_pred - y # 误差 dw (X.T error) / len(X) # 对 w 求导 db error.sum() / len(X) # 对 b 求导 w - learning_rate * dw # 更新 w b - learning_rate * db # 更新 b if epoch % 100 0: loss (error ** 2).mean() print(fEpoch {epoch}: loss {loss:.4f}, w {w[0,0]:.3f}, b {b:.3f}) print(f训练完成: w {w[0,0]:.3f}, b {b:.3f})跑完之后你会发现(w) 和 (b) 会逐渐逼近真实的2.0和1.0损失函数不断下降。这个代码虽然简单但它包含了监督学习的完整闭环数据 → 模型 → 损失 → 优化 → 评估。4.4 学习率第二章里最值得反复实验的超参数学习率太小训练要跑很多轮才收敛浪费算力学习率太大参数更新过头损失函数可能不降反升甚至直接发散到NaN。这是新手最容易踩的坑。我的经验是先按数量级扫一遍。0.1、0.01、0.001、0.0001各跑几十轮看损失曲线的下降趋势再在表现最好的数量级附近精细调。这个从粗到细的思路后面调任何超参数都用得上。另外观察损失曲线时别只看最终值要看曲线形状。正常收敛是平滑下降逐渐平缓发散则表现为损失先降后突然飙升甚至变成负数数值溢出。如果遇到发散第一反应不是改代码而是调小学习率。5. 前两章自测清单与扩展建议学到什么程度才算合格这一节算是我的个人检验标准不一定对所有人适用但如果你能答上大部分说明前两章真的吃透了可以安心往后面的算法走。5.1 六道自测题测的是会不会用而不是背没背熟我整理了几道常见问题都是我在面试新人或者带实习生时一定会问的手上有100万条用户行为日志想预测用户明天会不会下单。这个问题属于什么类型数据需要怎么准备训练集准确率99%测试集只有75%最可能的原因是什么该怎么排查回归问题里为什么损失函数常用MSE而不是MAE什么场景下MAE反而更好学习率设成0.5之后损失变成NaN可能的原因是什么下一步怎么做线性回归的系数 (w) 有什么实际含义如果某个特征系数接近0说明什么数据里有一个特征的值域在0到100000另一个在0到1直接丢进模型训练会有什么问题前五题答案在前两章范围内第六题涉及特征缩放严格说是后面章节的内容但它和线性回归的梯度更新直接相关——特征尺度差异大时梯度下降会震荡得很厉害甚至不收敛。如果你还没学到可以先记住结论数值差异大的连续特征通常要做归一化或标准化。5.2 一个最关键的习惯每学一个算法先手写推导一遍我见过太多人用scikit-learn调包调得很熟练但你问他这个模型的损失函数是什么他答不上来。这不代表他不能做项目但遇到问题时的排查能力会差很多——因为模型对他来说是个黑盒。我的建议是每学一个算法至少手写一次完整的推导和最小实现。线性回归是最简单的后面学的逻辑回归、决策树、SVM每一个都可以这样过一遍。手写一遍和调包一百遍的收获完全不同前者建立的是我知道每一步在做什么的掌控感后者只是我会调用一个函数。5.3 前两章和后面内容的连接点很多人学完前两章会有一个困惑我学的这些和深度学习那些神经网络有什么关系答案很简单神经网络就是深层的线性变换加非线性激活函数它的训练过程依然是前向计算、损失函数、反向传播、梯度下降。你把线性回归的梯度下降吃透了神经网络的训练逻辑就已经懂了一半。第二个连接点是评估意识。前两章强调的训练集、验证集、测试集划分在往后所有模型里都适用而且越复杂的模型越依赖严谨的划分。后面学交叉验证、学正则化、学防止过拟合的各种手段时你会发现它们解决的都是第一章就提出的那个核心矛盾怎么让模型在见过的数据上学会规律而不是死记硬背并且能迁移到新数据上。我自己的体会是前两章不需要一次全懂但一定要带着问题反复回看。比如你学到决策树时发现剪枝是为了防止过拟合再回看第一章的泛化概念会有完全不同的理解。这种螺旋式理解才是前两章的正确打开方式——别急着过去它值得你多花几周。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑