读 «动⼿学深度学习 Pytorch 版»
线性回归
模型定义
设房屋的面积为 $x_1$,房龄为 $x_2$,售出价格为 $y$。我们需要建立基于输入 $x_1$ 和 $x_2$ 来计算输出 $y$ 的表达式,也就是模型(model)。顾名思义,线性回归假设输出与各个输入之间是线性关系:
\[\hat{y} = x_1 w_1 + x_2 w_2 + b\]其中 $w_1$ 和 $w_2$ 是权重(weight),$b$ 是偏差(bias),且均为标量。它们是线性回归模型的参数(parameter)。模型输出 $\hat{y}$ 是线性回归对真实价格 $y$ 的预测或估计。
假设我们采集的样本数为 $n$,索引为 $i$ 的样本的特征为 $x_1^{(i)}$ 和 $x_2^{(i)}$,标签为 $y^{(i)}$。对于索引为 $i$ 的房屋,线性回归模型的房屋价格预测表达式为
\[\hat{y}^{(i)} = x_1^{(i)} w_1 + x_2^{(i)} w_2 + b\]损失函数
它在评估索引为 $i$ 的样本误差的表达式为
\[\ell^{(i)}(w_1, w_2, b) = \frac{1}{2} \left(\hat{y}^{(i)} - y^{(i)}\right)^2\]其中常数 $\frac 1 2$ 使对平方项求导后的常数系数为1,这样在形式上稍微简单一些。 我们用训练数据集中所有样本误差的平均来衡量模型预测的质量,即(注:这里改成 $m$ 样本,原书为 $n$)
\[\ell(w_1, w_2, b) =\frac{1}{m} \sum_{i=1}^m \ell^{(i)}(w_1, w_2, b) =\frac{1}{m} \sum_{i=1}^m \frac{1}{2}\left(x_1^{(i)} w_1 + x_2^{(i)} w_2 + b - y^{(i)}\right)^2\]在模型训练中,我们希望找出一组模型参数,记为 \(w_1^*, w_2^*, b^*\),来使训练样本平均损失最小:
\[w_1^*, w_2^*, b^* = \underset{w_1, w_2, b}{\arg\min} \ell(w_1, w_2, b)\]矢量计算表达式
如果我们对训练数据集里的3个房屋样本(索引分别为1、2和3)逐一预测价格,将得到
\[\begin{aligned} \hat{y}^{(1)} &= x_1^{(1)} w_1 + x_2^{(1)} w_2 + b,\\ \hat{y}^{(2)} &= x_1^{(2)} w_1 + x_2^{(2)} w_2 + b,\\ \hat{y}^{(3)} &= x_1^{(3)} w_1 + x_2^{(3)} w_2 + b. \end{aligned}\]现在,我们将上面3个等式转化成矢量计算。设
\[\boldsymbol{\hat{y}} = \begin{bmatrix} \hat{y}^{(1)} \\ \hat{y}^{(2)} \\ \hat{y}^{(3)} \end{bmatrix},\quad \boldsymbol{X} = \begin{bmatrix} x_1^{(1)} & x_2^{(1)} \\ x_1^{(2)} & x_2^{(2)} \\ x_1^{(3)} & x_2^{(3)} \end{bmatrix},\quad \boldsymbol{w} = \begin{bmatrix} w_1 \\ w_2 \end{bmatrix}\]对3个房屋样本预测价格的矢量计算表达式为$\boldsymbol{\hat{y}} = \boldsymbol{X} \boldsymbol{w} + b,$ 其中的加法运算使用了广播机制
延伸到 $m$ 个样本 \(\begin{aligned} \hat{y}^{(1)} &= x_1^{(1)} w_1 + x_2^{(1)} w_2 + b,\\ \hat{y}^{(2)} &= x_1^{(2)} w_1 + x_2^{(2)} w_2 + b,\\ \hat{y}^{(3)} &= x_1^{(3)} w_1 + x_2^{(3)} w_2 + b,\\ \cdots,\\ \hat{y}^{(m)} &= x_1^{(m)} w_1 + x_2^{(m)} w_2 + b \end{aligned}\)
\[\boldsymbol{\hat{y}} = \begin{bmatrix} \hat{y}^{(1)} \\ \hat{y}^{(2)} \\ \hat{y}^{(3)} \\ \cdots \\ \hat{y}^{(m)} \end{bmatrix},\quad \boldsymbol{X} = \begin{bmatrix} x_1^{(1)} & x_2^{(1)} \\ x_1^{(2)} & x_2^{(2)} \\ x_1^{(3)} & x_2^{(3)} \\ \cdots \\ x_1^{(m)} & x_2^{(m)} \end{bmatrix},\quad \boldsymbol{w} = \begin{bmatrix} w_1 \\ w_2 \end{bmatrix}\]延伸到 $m$ 个样本,$n$ 个变量 $x$, 注意这里还只是一个输出 $y$ \(\begin{aligned} \hat{y}^{(1)} &= x_1^{(1)} w_1 + x_2^{(1)} w_2 + \cdots + x_n^{(1)} w_n + b,\\ \hat{y}^{(2)} &= x_1^{(2)} w_1 + x_2^{(2)} w_2 + \cdots + x_n^{(2)} w_n + b,\\ \hat{y}^{(3)} &= x_1^{(3)} w_1 + x_2^{(3)} w_2 + \cdots + x_n^{(3)} w_n + b,\\ \cdots,\\ \hat{y}^{(m)} &= x_1^{(m)} w_1 + x_2^{(m)} w_2 + \cdots + x_n^{(m)} w_n + b \end{aligned}\)
\[\boldsymbol{\hat{y}} = \begin{bmatrix} \hat{y}^{(1)} \\ \hat{y}^{(2)} \\ \hat{y}^{(3)} \\ \cdots \\ \hat{y}^{(m)} \end{bmatrix}_{m \times 1},\quad \boldsymbol{X} = \begin{bmatrix} x_1^{(1)} & x_2^{(1)} & \cdots & x_n^{(1)} \\ x_1^{(2)} & x_2^{(2)} & \cdots & x_n^{(2)}\\ x_1^{(3)} & x_2^{(3)} & \cdots & x_n^{(3)}\\ \cdots \\ x_1^{(m)} & x_2^{(m)} & \cdots & x_n^{(m)} \end{bmatrix}_{ m \times n},\quad \boldsymbol{w} = \begin{bmatrix} w_1 \\ w_2 \\ \cdots \\ w_n \end{bmatrix}_{n \times 1}\]线性回归的从零开始实现
之前参考过一篇从零开始实现线性回归,完全用numpy实现,其中只有一个feature变量,下面是参考原书,有两个features 的线性回归。做了一点小小的改动,加上了3D的数据图
1 |
|
⽣成数据集
1 |
|
1 |
|
1 |
|
1 |
|
读取数据
1 |
|
初始化模型参数
1 |
|
1 |
|
1 |
|
1 |
|
定义模型, 损失函数,优化算法
1 |
|
训练模型
1 |
|
1 |
|
1 |
|
预测数据
1 |
|
1 |
|
Interactive 3D 图
1 |
|