目录
机器学习(一)
/  

机器学习(一)

image.png

机器学习入门(一):从线性回归开始

🎯 本篇目标:理解线性回归、损失函数、梯度下降这三个核心概念,并通过一个"工资预测"的小练习巩固理解。


📐 数学基础速览

后面的公式会用到这些符号,如果你忘了,先看这里。

求和符号 Σ(Sigma)

$$
\sum_{i=1}^{n} x_i = x_1 + x_2 + \cdots + x_n
$$

  • $\sum$ 读作 "sigma",表示"把一堆东西加起来"。
  • $i=1$ 表示从第 1 个开始。
  • $n$ 表示加到第 n 个。

举例:假设有 3 个数:2, 5, 8

$$
\sum_{i=1}^{3} x_i = 2 + 5 + 8 = 15
$$

平方与开根号

运算符号举例结果
平方$x^2$$3^2$$9$
开根号$\sqrt{x}$$\sqrt{9}$$3$

为什么要平方? 因为误差有正有负(预测可能偏多或偏少),直接相加会互相抵消。平方后全变正数,就能真实反映误差大小了。

平均值

$$
\bar{x} = \frac{1}{n} \sum_{i=1}^{n} x_i = \frac{x_1 + x_2 + \cdots + x_n}{n}
$$

  • $\bar{x}$ 读作 "x bar",就是我们日常说的"平均数"。

1. 线性回归:用一条直线做预测

什么是线性回归?

简单说就是:找一条直线,尽可能地贴近所有数据点

比如我们想根据房子的面积来预测房价,观察数据后发现面积越大房价越高,大致呈一条直线的趋势。我们就可以用一个一次方程来表示这个关系:

$$
y = wx + b
$$

符号含义生活化理解
$x$输入特征(如面积)你已知的信息
$y$预测结果(如房价)你想知道的答案
$w$权重(weight)面积每增加 1㎡,房价增加多少(直线的斜率)
$b$偏置(bias)基础价格,即面积为 0 时的起始价(直线的截距)

💡 一句话总结:机器学习的"训练",就是找到最好的 w 和 b,让这条直线尽可能贴近真实数据。

直观理解

想象一个坐标系:

  • 横轴是面积(x)
  • 纵轴是房价(y)
  • 数据点散布在图上
  • 我们要画一条直线,让它尽量穿过这些点

w(权重) 决定了直线的倾斜程度(斜率):

  • w 大 → 直线陡 → 面积对房价影响大
  • w 小 → 直线平 → 面积对房价影响小

b(偏置) 决定了直线的上下位置(截距):

  • b 大 → 直线整体往上移 → 基础房价高
  • b 小 → 直线整体往下移 → 基础房价低

2. 损失函数:怎么衡量预测好不好?

找 w 和 b 的前提是——我们得有一个标准来评判"这组 w、b 好不好"。这个标准就是 损失函数(Loss Function)

均方误差(MSE, Mean Squared Error)

最常用的损失函数之一:

$$
MSE = \frac{1}{n} \sum_{i=1}^{n} (\text{真实值}_i - \text{预测值}_i)^2
$$

拆解成三步来理解

步骤操作为什么这样做
计算每个样本的误差:真实值 − 预测值看每个预测偏了多少
把误差平方避免正负抵消;同时让大误差被更严厉地惩罚
平均综合所有样本,得到一个整体评分

📝 举例说明

假设有 3 套房,真实房价是 100万、200万、300万,你的模型预测是 110万、190万、280万:

样本真实值预测值误差误差²
1100110−10100
220019010100
330028020400

$$
MSE = \frac{100 + 100 + 400}{3} = 200
$$

核心原则:MSE 越小,预测越准。

那么问题来了:怎么让 MSE 变小呢?→ 梯度下降 👇

🔍 拓展:方差与标准差

方差和 MSE 长得很像,但含义不同。方差衡量的是"数据本身有多分散",而 MSE 衡量的是"预测和真实值之间的差距"。

方差(Variance)

衡量数据分散程度(偏离平均值的程度),单位是原单位的平方。

$$
s^2 = \frac{1}{n-1} \sum_{i=1}^{n} (x_i - \bar{x})^2
$$

  • $s^2$:样本方差(如果是总体方差,用 $\sigma^2$,分母为 $n$)
  • $x_i$:第 $i$ 个样本值
  • $\bar{x}$:样本平均值
  • $n$:样本数量

为什么分母是 n−1 而不是 n?

这叫做贝塞尔校正(Bessel's correction)。简单理解:用样本估计总体时,样本计算的偏差会偏小,除以 n−1 可以修正这个偏差,让估计更准。如果你拿到的是全部数据(总体),分母就用 n。

标准差(Standard Deviation)

方差开根号,单位回到原来的单位,更直观。

$$
s = \sqrt{\frac{1}{n-1} \sum_{i=1}^{n} (x_i - \bar{x})^2}
$$

💡 标准差可以理解为:数据平均上下波动多少

比如一组考试成绩的标准差是 10 分,意思是大多数人的成绩在平均分 ± 10 分的范围内。


3. 梯度下降:怎么找到最好的 w 和 b?

什么是梯度下降?

你已经知道了:模型是 y = wx + b,MSE 用来衡量预测好不好,越小越好。我们的目标就是找到让 MSE 最小的 w 和 b。

问题是:w 和 b 有无数种组合,我们不可能一个一个去试。 这时候就需要一种聪明的方法来自动地、一步一步地调整 w 和 b,让 MSE 逐渐变小——这就是 梯度下降(Gradient Descent)

一句话理解:梯度下降 = 一步步调整参数(w 和 b),让误差(MSE)越来越小的优化方法。

直觉理解:蒙眼下山

想象你蒙着眼睛站在山坡上,看不到全貌,只能感受脚下的坡度。你的目标是走到山谷最低点

策略很简单:每次朝下降最快的方向走一小步。一步一步地走,最终你就能到达山谷最低点。

在机器学习中:

比喻对应概念
山的高度MSE(损失函数的值)
你的位置当前的 $w$ 和 $b$
山谷最低点最好的 $w$ 和 $b$(MSE 最小)
坡度梯度(告诉你往哪个方向调整 w、b)
步子大小学习率(每次调整多少)

训练过程

$$
w, b \xrightarrow{\text{代入模型}} \hat{y}(预测值) \xrightarrow{\text{对比真实值}} \text{误差} \xrightarrow{\text{计算}} MSE \xrightarrow{\text{梯度下降}} \text{调整}, w, b
$$

这个过程反复循环(每循环一轮叫做一个 epoch),直到 MSE 足够小或不再明显下降。

具体怎么调整?——梯度和学习率

什么是梯度?

梯度就是损失函数对参数的导数(偏导数)。如果你忘了导数:

导数 = 变化率 = 斜率

比如 $f(x) = x^2$,它的导数是 $f'(x) = 2x$

  • 当 $x=3$ 时,导数 = 6(正数,说明函数在上升 -> 要往左走,即减小 x)
  • 当 $x=-2$ 时,导数 = -4(负数,说明函数在下降 -> 要往右走,即增大 x)

导数的正负告诉你方向,大小告诉你坡度有多陡。

先认识偏导数符号 $\partial$

你会看到下面的公式里有一个弯弯的 $\partial$ 符号,它叫 偏导数符号,读作 "partial"。

$\partial$ 和普通导数 $d$ 的区别:

符号使用场景举例
$d$函数只有一个变量$f(x) = x^2$,只有 x,用 $\frac{df}{dx}$
$\partial$函数有多个变量MSE 同时取决于 w 和 b,用 $\frac{\partial MSE}{\partial w}$
  • $\frac{\partial MSE}{\partial w}$ 的意思是:固定 b 不动,w 变一点点,MSE 会变多少?
  • $\frac{\partial MSE}{\partial b}$ 的意思是:固定 w 不动,b 变一点点,MSE 会变多少?

把它理解为:"我只动一个开关(w 或 b),看看结果(MSE)怎么变"

偏导数结果的正负代表什么?

计算出偏导数后,你会得到一个数字,这个数字的正负号非常关键——它告诉你参数该往哪个方向调

$\frac{\partial MSE}{\partial w}$ 的结果含义该怎么做
正数w 增大时,MSE 也增大(误差变大)w 太大了,应该减小 w
负数w 增大时,MSE 反而减小(误差变小)w 太小了,应该增大 w
接近 0w 再怎么动,MSE 变化都很小快到最优值了,不用大幅调整

💡 简单记忆:偏导数的符号 = MSE 随 w 变化的方向。正数说明"再增大 w 只会让误差更大",负数说明"增大 w 能让误差变小"。

用工资例子验证

之前算出 $\frac{\partial MSE}{\partial w} \approx -18667$(负数),说明:

  • 当前 $w = 2000$ 偏小了
  • 增大 w 可以让 MSE 变小(预测更准)
  • 所以梯度下降会增大 w → 完全符合直觉(真实增长速度是 4000,当前的 2000 确实太小)

这也解释了更新公式中减号的作用

$$
w_{\text{新}} = w_{\text{旧}} - \alpha \times \underbrace{\frac{\partial MSE}{\partial w}}{\text{负数}} = w{\text{旧}} + \text{正数} \implies w \text{ 变大}
$$

如果偏导数是正数(w 偏大),减去一个正数,w 就变小了。不管哪种情况,减号都能让 w 自动往正确方向调整——这就是梯度下降的精妙之处。

梯度公式不是凭空出现的,它是从 MSE 公式一步步求导推出来的。下面我们完整推导一遍。

先回顾两个求导规则

如果你完全忘了求导,只需要记住这两条规则就够用了:

规则 1:幂函数求导 — $x^n$ 求导等于 $n \cdot x^{n-1}$(指数拿下来乘,指数减 1)

原函数求导结果
$x^2$指数 2 拿下来,指数变 1$2x$
$x^3$指数 3 拿下来,指数变 2$3x^2$

规则 2:链式法则 — 如果 $x$ 外面套了一层函数,求导时要逐层剥开,每层导数相乘

比如 $(3x+1)^2$ 对 $x$ 求导:先对外层 $(\cdots)^2$ 求导得 $2(3x+1)$,再乘以内层 $(3x+1)$ 对 $x$ 的导数 $3$,最终 = $6(3x+1)$

推导 ∂MSE/∂w

起点:MSE 的原始公式(用模型 $\hat{y}_i = wx_i + b$ 代入)

$$
MSE = \frac{1}{n} \sum_{i=1}^{n} (\hat{y}i - y_i)^2 = \frac{1}{n} \sum{i=1}^{n} (wx_i + b - y_i)^2
$$

对 $w$ 求偏导(固定 b 不动,只看 w 的变化):

$$
\frac{\partial MSE}{\partial w} = \frac{1}{n} \sum_{i=1}^{n} \frac{\partial}{\partial w} (wx_i + b - y_i)^2
$$

第 1 步 — 外层求导:对 $(\cdots)^2$ 用幂函数规则,指数 2 拿下来:

$$
= \frac{1}{n} \sum_{i=1}^{n} 2(wx_i + b - y_i) \cdot \frac{\partial}{\partial w}(wx_i + b - y_i)
$$

第 2 步 — 内层求导(链式法则):$(wx_i + b - y_i)$ 对 $w$ 求导:

  • $wx_i$ 对 $w$ 求导 = $x_i$(w 的系数就是 $x_i$)
  • $b$ 对 $w$ 求导 = $0$(b 跟 w 无关,固定不动)
  • $y_i$ 对 $w$ 求导 = $0$(真实值是常数)

所以内层导数 = $x_i$

第 3 步 — 合并

$$
\frac{\partial MSE}{\partial w} = \frac{1}{n} \sum_{i=1}^{n} 2(wx_i + b - y_i) \cdot x_i = \frac{2}{n} \sum_{i=1}^{n} (\hat{y}_i - y_i) \cdot x_i
$$

推导 ∂MSE/∂b

同样的起点,这次对 $b$ 求偏导(固定 w 不动):

$$
\frac{\partial MSE}{\partial b} = \frac{1}{n} \sum_{i=1}^{n} 2(wx_i + b - y_i) \cdot \frac{\partial}{\partial b}(wx_i + b - y_i)
$$

内层 $(wx_i + b - y_i)$ 对 $b$ 求导:

  • $wx_i$ 对 $b$ 求导 = $0$(跟 b 无关)
  • $b$ 对 $b$ 求导 = $1$
  • $y_i$ 对 $b$ 求导 = $0$

所以内层导数 = $1$,代入得:

$$
\frac{\partial MSE}{\partial b} = \frac{2}{n} \sum_{i=1}^{n} (\hat{y}_i - y_i)
$$

💡 对比两个结果:对 w 求导多了一个 $\times x_i$,对 b 求导没有。原因就是 $w$ 在模型里乘了 $x$,而 $b$ 没有。

最终公式汇总

公式一:MSE 对 w 的偏导数

$$
\frac{\partial MSE}{\partial w} = \frac{2}{n} \sum_{i=1}^{n} (\text{预测值}_i - \text{真实值}_i) \cdot x_i
$$

部分含义大白话
$\frac{\partial MSE}{\partial w}$MSE 对 w 的偏导数w 动一点,MSE 变多少
$\frac{2}{n}$常数系数MSE 公式求导自然产生的(平方的指数 2 拿下来),n 是样本数量
$\text{预测值}_i - \text{真实值}_i$第 i 个样本的误差预测偏了多少
$\cdot , x_i$乘以第 i 个样本的输入值因为 w 是乘在 x 上的($y=wx+b$),所以 w 的影响和 x 有关
$\sum$把所有样本加起来综合考虑所有数据

公式二:MSE 对 b 的偏导数

$$
\frac{\partial MSE}{\partial b} = \frac{2}{n} \sum_{i=1}^{n} (\text{预测值}_i - \text{真实值}_i)
$$

注意和公式一几乎一样,但后面没有乘 $x_i$!这在推导中已经看到了——因为 $b$ 对 $b$ 求导等于 1,不涉及 $x$。

不需要死记公式!只要知道:梯度告诉你 w 和 b 该往哪个方向调、调多少。推导过程帮你理解公式为什么长这样

什么是学习率?

学习率(learning rate) 用符号 $\alpha$(alpha)表示,控制每一步走多大:

$$
w_{\text{新}} = w_{\text{旧}} - \alpha \cdot \frac{\partial MSE}{\partial w}
$$

$$
b_{\text{新}} = b_{\text{旧}} - \alpha \cdot \frac{\partial MSE}{\partial b}
$$

注意那个减号 :因为梯度指向"上坡方向",我们要往"下坡方向"走,所以要减去梯度。

学习率大小效果问题
太大步子迈太大可能跨过最低点,在两边来回跳(不收敛)
太小步子太小走得太慢,训练时间太长
合适稳步下降能顺利找到最低点 ✅

💡 常见学习率的取值:0.001、0.01、0.1 等。实际中需要尝试不同值来找到合适的。


4. 练习:工资预测

题目

工作年限 $x$真实工资 $y$
19000
213000
317000

模型公式为:

$$
y = 2000x + 5000
$$

① 预测工资

$x$$\hat{y} = 2000x + 5000$预测工资
1$2000 \times 1 + 5000$7000
2$2000 \times 2 + 5000$9000
3$2000 \times 3 + 5000$11000

② 计算误差

$x$真实值 $y$预测值 $\hat{y}$误差($y - \hat{y}$)
190007000+2000
2130009000+4000
31700011000+6000

💡 所有误差都是正数,说明模型的预测值全部偏低,增长速度不够。

③ 计算 MSE

$$
MSE = \frac{2000^2 + 4000^2 + 6000^2}{3} = \frac{4000000 + 16000000 + 36000000}{3} = \frac{56000000}{3} \approx 18666667
$$

④ w 应该调大还是调小?

答:应该调大 ✅

理由:

  • 所有预测值都低于真实值 → 斜率 $w = 2000$ 太小了
  • 观察真实数据:每多工作 1 年,工资增加约 4000(9000→13000→17000)
  • 而当前 $w = 2000$,明显偏小
  • 如果用 $w = 4000, b = 5000$,预测值就变成 9000、13000、17000,完美拟合!

⑤ 思考延伸

如果我们用梯度下降来训练这个模型,它会自动做什么?

  1. 计算 MSE 对 $w$ 的梯度:

$$
\frac{\partial MSE}{\partial w} = \frac{2}{3} \left[ (7000-9000) \times 1 + (9000-13000) \times 2 + (11000-17000) \times 3 \right]
$$

$$
= \frac{2}{3} \left[ -2000 + (-8000) + (-18000) \right] = \frac{2}{3} \times (-28000) \approx -18667
$$

  1. 梯度为负数 -> $w$ 要减去一个负数 -> w 变大

这和我们的直觉完全一致!梯度下降就是把这个"直觉判断"变成了精确的数学计算。

⑥ 完整演示:用梯度下降手算一轮参数更新

下面我们用上面的工资数据,假设学习率 $\alpha = 0.0001$,完整走一遍梯度下降的过程

当前状态:$w = 2000$,$b = 5000$,预测值分别为 7000、9000、11000。

第一步:计算 $\frac{\partial MSE}{\partial w}$(w 的梯度)

$$
\frac{\partial MSE}{\partial w} = \frac{2}{3} \left[ (7000-9000) \times 1 + (9000-13000) \times 2 + (11000-17000) \times 3 \right]
$$

逐项计算:

样本预测值 - 真实值$\times x_i$结果
17000 - 9000 = -2000$\times$ 1-2000
29000 - 13000 = -4000$\times$ 2-8000
311000 - 17000 = -6000$\times$ 3-18000

加起来:$-2000 + (-8000) + (-18000) = -28000$

乘以 $\frac{2}{3}$:$\frac{2}{3} \times (-28000) \approx -18667$

第二步:更新 w

$$
w_{\text{新}} = w_{\text{旧}} - \alpha \times \frac{\partial MSE}{\partial w} = 2000 - 0.0001 \times (-18667) = 2000 + 1.87 \approx 2001.87
$$

✅ 梯度为负数,减去负数等于加上正数,所以 w 变大了!方向正确。

第三步:计算 $\frac{\partial MSE}{\partial b}$(b 的梯度)

$$
\frac{\partial MSE}{\partial b} = \frac{2}{3} \left[ (7000-9000) + (9000-13000) + (11000-17000) \right]
$$

$$
= \frac{2}{3} \times (-2000 + (-4000) + (-6000)) = \frac{2}{3} \times (-12000) = -8000
$$

第四步:更新 b

$$
b_{\text{新}} = b_{\text{旧}} - \alpha \times \frac{\partial MSE}{\partial b} = 5000 - 0.0001 \times (-8000) = 5000 + 0.8 = 5000.8
$$

第五步:一轮结束,总结

参数更新前更新后变化方向
$w$20002001.87调大 ✅
$b$50005000.8调大 ✅

这只是第 1 轮(epoch 1),每一轮 w 和 b 都会调整一点点,MSE 也会逐渐减小。经过几千轮之后,$w$ 会逐渐接近 $4000$,$b$ 保持在 $5000$ 附近,MSE -> 0,完美拟合真实数据!

关键公式速查卡

更新什么公式白话
更新 w$w_{新} = w_{旧} - \alpha \times \frac{\partial MSE}{\partial w}$旧的 w - 学习率 $\times$ w的梯度
更新 b$b_{新} = b_{旧} - \alpha \times \frac{\partial MSE}{\partial b}$旧的 b - 学习率 $\times$ b的梯度

减号的意义:梯度指向上坡方向,我们要下坡,所以要反着走(减去)。


📝 本章小结

概念一句话解释
线性回归用一条直线 $y = wx + b$ 来拟合数据、做预测
损失函数(MSE)衡量预测好不好的"评分",越小越好
梯度下降一步步调整 $w$ 和 $b$,让 MSE 变小的方法
学习率每步走多大,太大会跳过最低点,太小会走太慢
梯度损失函数的导数,告诉你参数该往哪个方向调

🚀 下一步学习建议

  •  试着用 Python 实现一个简单的线性回归(numpy 就够了)
  •  了解多元线性回归:当输入不止一个特征时(如面积 + 楼层 + 年份),$y = w_1 x_1 + w_2 x_2 + \cdots + b$
  •  理解过拟合与欠拟合的概念
  •  学习特征缩放(Feature Scaling):为什么要对数据做标准化处理

标题:机器学习(一)
作者:gitsilence
地址:https://blog.lacknb.cn/articles/2026/04/24/1776993568684.html