数学原理
给定数据集 $D = {(x_1, y_1), (x_2, y_2), \ldots, (x_m, y_m)}$,其中 $x_i = (x_{i1}, x_{i2}, \ldots, x_{id}), \quad y_i \in \mathbb{R}$,“线性回归”(linear regression) 试图学得一个线性模型以尽可能准确地预测给定输入值的输出。
线性回归试图学得
$$
f(x_i) = w x_i + b, \quad 使得 ; f(x_i) \simeq y_i
$$
如何确定 w 和 b 呢?关键在于如何衡量 f(x) 和 y 之间的差别。在第一次学习中我们已经得知均方误差是回归任务重最常用的性能变量,因此我们可以试图让均方误差最小化,即
$$
(w^, b^) = \arg\min_{(w,b)} \sum_{i=1}^{m} (f(x_i) - y_i)^2
$$
$$
= \arg\min_{(w,b)} \sum_{i=1}^{m} (y_i - w x_i - b)^2
$$
均方误差有非常好的几何意义,它对应了常用的欧几里得距离或简称“欧氏距离”,基于均方误差最小化来进行模型求解的方法称为 “最小二乘法”。在线性回归中,最小二乘法就是试图找到一条直线,使所有样本导致线上的欧氏距离之和最小。
求解 w 和 b 使得 $E(w,b) = \sum_{i=1}^{m} (y_i - w x_i - b)^2$ 最小化的过程,成为线性回归模型的最小二乘“参数估计”,我们将 E(w,b) 分别对 w 和 b 求偏导,可以得到
$$
\frac{\partial E(w,b)}{\partial w}=2\left(w \sum_{i=1}^{m} x_i^2-\sum_{i=1}^{m} (y_i - b)x_i\right)
$$
$$
\frac{\partial E(w,b)}{\partial b}=2\left(mb-\sum_{i=1}^{m}(y_i - wx_i)\right)
$$
代码实现
使用 AI 工具生成一份 csv 格式的线性回归数据集,并使用 python 得 pandas 工具读取,完整代码如下:
1 | import numpy as np |
在这段代码中,(1/m) * np.sum((y_pred - y) * X) 求得就是上文中的 (1/2m)E(w,b) 对 w 的偏导数。
最终的训练结果如下,和目标值基本吻合。
1 | ······ |