引言
深度学习系列第一篇,我们从线性回归说起。
一元线性回归
你的朋友问你,在海淀区买一套 60 平米左右的小两居需要多少钱?你该如何回答他呢。
负责任的你并没有冒然回答,而是从网上找了一些房子的数据,建立了下面的表格。
并根据表格中的数据做出了下图
图中每个点代表一条数据,如果可以找到图中红线所示拟合各个数据点的线性方程 y = wx + b, 然后把 x = 60 带进去就可以回复朋友了。
从数据中确定(w,b)从而确定线性方程的过程就是线性回归,这里我们只有一个变量 x, 所以又称为一元线性回归。
现在假设我们找到了一对(w,b)得到一个方程 y = wx + b, 那么怎么评估这个方程的效果呢?
直观来看我们希望方程尽可能符合所有的数据点,也就是对于每个 x ,我们希望方程预测的值 y ^ \hat y y^ 与真实值 y y y 的差异越小越好,这里有 m 个样本,我们把 m 个样本的误差平方和作为整体的误差 loss:
l o s s = m i n ( 1 2 ∑ i = 1 m ( y ^ i − y i ) 2 ) loss = min(\frac 12 \sum_{i=1}^m (\hat y_i - y_i)^2) loss=min(21i=1∑m(y^i−yi)2)
其中 y i y_i yi 表示 x i x_i xi 的真实价格,而 y ^ i \hat y_i y^i 表示 x i x_i xi 在方程上预测的值, 1 2 \frac12 21 是为了求解方便。
多元线性回归
现在你的方程只需要输入面积就可以得到房价,朋友很满意。但他感觉你的方程太笼统了,房价不仅与面积有关,还和房子的地段、房龄、装修甚至绿化都有关系,你能不能再帮他建立一个方程,综合房子的面积、房龄、位置等因素,预测房屋的价格。
为此你又上网搜集了如下数据。
变量多了,但道理是相通的,我们需要找到一个含有 n 个变量的方程:
y = w 1 x 1 + w 2 x 2 + . . . + w n x n + b y = w_1x_1 + w_2x_2 + ... + w_nx_n + b y=w1x1+w2x2+...+wnxn+b
矩阵形式
y = [ w 1 … w n ] [ x 1 ⋮ x n ] + b y = \begin{bmatrix}w_{1} & \dots & w_{n}\end{bmatrix} \begin{bmatrix}x_{1} \\ \vdots \\ x_{n}\end{bmatrix} + b y=[w1…wn]⎣⎢⎡x1⋮xn⎦⎥⎤+b
因为有 m 个样本,m 个样本的矩阵形式
[ y 1 … y m ] = [ w 1 … w n ] [ x 1 … x 1 m ⋮ ⋱ ⋮ x n … x n m ] + b \begin{bmatrix}y_{1} & \dots & y_{m}\end{bmatrix} = \begin{bmatrix}w_{1} & \dots & w_{n}\end{bmatrix} \begin{bmatrix}x_{1} & \dots & x_{1m}\\ \vdots &\ddots & \vdots \\ x_{n} & \dots & x_{nm}\end{bmatrix} + b [y1…ym]=[w1…wn]⎣⎢⎡x1⋮xn…⋱…x1m⋮xnm⎦⎥⎤+b
也即
Y 1 m = W 1 n ∗ X n m + b Y_{1m} = W_{1n} * X_{nm} + b Y1m=W1n∗Xnm+b
其中:
- n n n 表示变量维度
- m m m 表示样本个数
- x i x_i xi 表示不同的变量
- w i w_i wi 表示变量的权重
- b 表示偏移量。
和一元线性回归一样,我们希望方程预测的值 y ^ \hat y y^ 与真实值 y y y 的差异越小越好,所以需要把 m 个样本的误差加起来作为整体的误差 loss:
l o s s = m i n ( 1 2 ∑ i = 1 m ( y ^ i − y i ) 2 ) loss = min(\frac12\sum_{i=1}^m (\hat y_i - y_i)^2) loss=min(21i=1∑m(y^i−yi)2)
其中 y i y_i yi 表示 x i x_i xi 的真实价格,而 y ^ i \hat y_i y^i 表示 x i x_i xi 在方程上预测的值。
求解线性回归方程
接下来看看通过一组数据如何找到误差最小的 (W,b) 从而确定线性回归方程。
问题描述
求解参数 w,b,使得矩阵方程
Y
1
m
=
W
1
n
∗
X
n
m
+
b
Y_{1m} = W_{1n} * X_{nm} + b
Y1m=W1n∗Xnm+b
的 loss 最小。
l o s s = m i n ( 1 2 ∑ i = 1 m ( y ^ i − y i ) 2 ) loss = min(\frac12\sum_{i=1}^m (\hat y_i - y_i)^2) loss=min(21i=1∑m(y^i−yi)2)
线性回归的求解方法通常有两种,最小二乘法和梯度下降法。
最小二乘法
最小二乘法直接求解方程的偏导数为 0 的点,因为凸函数偏导数为 0 的驻点即为最小值点。
损失函数 Loss
L o s s = 1 2 ∑ i = 1 m ( y ^ i − y i ) 2 = 1 2 ( W X + b − Y ) 2 \begin{aligned} Loss &= \frac12\sum_{i=1}^m (\hat y_i - y_i)^2 \\ &= \frac12(WX + b - Y)^2 \end{aligned} Loss=21i=1∑m(y^i−yi)2=21(WX+b−Y)2
求 W, b 的偏导数
∂
L
o
s
s
∂
W
=
∂
1
2
(
W
X
+
b
−
Y
)
2
∂
W
=
1
m
(
W
X
+
b
−
Y
)
X
T
\begin{aligned} \frac{\partial Loss}{\partial W} &= \frac{\partial \frac12(WX + b - Y)^2}{\partial W} \\ &= \frac 1m(WX + b - Y)X^T \end{aligned}
∂W∂Loss=∂W∂21(WX+b−Y)2=m1(WX+b−Y)XT
∂
L
o
s
s
∂
b
=
∂
1
2
(
W
X
+
b
−
Y
)
2
∂
b
=
1
m
(
W
X
+
b
−
Y
)
\begin{aligned} \frac{\partial Loss}{\partial b} &= \frac{\partial \frac12(WX + b - Y)^2}{\partial b} \\ &= \frac 1m(WX + b - Y) \end{aligned}
∂b∂Loss=∂b∂21(WX+b−Y)2=m1(WX+b−Y)
令两个偏导数都为 0,可以得出
W
=
(
Y
−
b
)
X
T
(
X
X
T
)
−
1
b
=
1
n
(
Y
−
W
X
)
\begin{aligned} W &= (Y-b)X^T(XX^T)^{-1} \\ b &= \frac 1n (Y - WX) \end{aligned}
Wb=(Y−b)XT(XXT)−1=n1(Y−WX)
梯度下降法
梯度下降法是一个逐步逼近的过程,每次沿着导数下降的方向行走一个步长,最终到达最低点。
- 先随机生成 W,b
- 求dW, db,这一步同最小二乘法
d W = 1 m ( W X + b − Y ) X T d b = 1 m ( W X + b − Y ) \begin{aligned} dW &= \frac 1m(WX + b - Y)X^T \\ db &= \frac 1m(WX + b - Y) \end{aligned} dWdb=m1(WX+b−Y)XT=m1(WX+b−Y) - 更新 W,b
W = W − α d W b = b − α d b \begin{aligned} W &= W - \alpha\,dW \\ b &= b - \alpha\,db \end{aligned} Wb=W−αdW=b−αdb
其中 α \alpha α 为每次更新的步长, 又叫做学习率。
这样经过多轮后,方程逼近最小值,W, b 逼近最优值。
后记
线性回归先聊到这里,我们注意到线性回归的预测结果是连续的值,比如房价。那么对于分类问题比如某套房子是否值得买,又应该怎样求解呢?下次我们就一起来聊聊解决二分类问题的逻辑回归。
欢迎关注本人公众号《大数据茶馆》,用大白话畅聊大数据。
来的都是客,欢迎您常来坐坐~