Regression
2020.8.6
引入:回归可以做什么
- 股票预测系统(Stock Market Forecast)
输入:过去十年股票起伏资料
输出:明天道琼工业指数 - 无人驾驶车(Self-driving Car)
输入:无人驾驶车传感器数据
输出:方向盘角度 - 推荐系统(Recommendation)
实例应用:宝可梦CP值预测
预测进化后宝可梦的CP(Combat Power)值,从而判断是否进化这只宝可梦
变量定义:
x
c
p
x_{cp}
xcp表示某一只宝可梦进化前的战斗力,
x
s
x_s
xs表示宝可梦的种类,
x
h
p
x_{hp}
xhp表示宝可梦的生命值,
x
w
x_w
xw表示宝可梦的重量,
x
h
x_h
xh表示宝可梦的高度,
y
y
y表示进化后的战斗力
三个步骤:找个模型、定义模型好坏,选出最好的模型
Step1: Model 找个模型
A set of function
先找一个简单的模型:
y
=
b
+
w
⋅
x
c
p
y=b+w·x_{cp}
y=b+w⋅xcp其中
x
c
p
x_{cp}
xcp代表进化前的CP值,
y
y
y代表进化后的CP值,
w
w
w和
b
b
b是未知参数,填进不同的数值得到不同的函数。
这是一种线性模型(Linear Model),遵循
y
=
b
+
∑
w
i
x
i
y=b+\sum w_i x_i
y=b+∑wixi 其中
x
i
x_i
xi表示输入的某个属性,称为特征(feature),如宝可梦的战斗力、体重等;
w
i
w_i
wi表示权重(weight);
b
b
b表示偏置(bias)
Step 2: Goodness of Function 定义模型好坏
Training Data
x
1
x^1
x1代表一个完整的输入(function input),
y
^
1
\hat{y}^1
y^1代表实际观测值(function output),
y
1
y^1
y1代表函数的预测值。上标代表一个完整的输入,下标代表一个输入的某个属性或特征。
我的理解是
y
^
\hat{y}
y^是真实值,
y
y
y是预测值
定义损失函数(Loss function)来衡量函数的好坏。损失函数是函数的函数,输入是一个函数,输出是这个函数的好坏程度。损失函数输出的值越小,代表输入函数的拟合效果越好。本质是输入
w
w
w和
b
b
b,也可以说是衡量一组参数的好坏。
L
(
f
)
=
∑
n
=
1
10
(
y
^
n
−
f
(
x
c
p
n
)
)
2
L(f)=\sum_{n=1}^{10}(\hat{y}^n-f(x_{cp}^n))^2
L(f)=n=1∑10(y^n−f(xcpn))2即
L
(
w
,
b
)
=
∑
n
=
1
10
(
y
^
n
−
(
b
+
w
⋅
x
c
p
n
)
)
2
L(w,b) =\sum_{n=1}^{10}(\hat{y}^n-(b+w·x_{cp}^n))^2
L(w,b)=n=1∑10(y^n−(b+w⋅xcpn))2用真正的输出
y
^
n
\hat{y}^n
y^n减去预测的输出
b
+
w
⋅
x
c
p
n
b+w·x_{cp}^n
b+w⋅xcpn再平方,得到估测的误差。本例中共10个样本,因此
n
n
n的范围为1至10。
Step 3: Best Function 选出最好的模型 - Gradient Descent 梯度下降算法
Goodness of funtion f
从函数集合中挑选最好的函数,即找到一个
f
f
f让
L
(
f
)
L(f)
L(f)最小,写作
f
∗
f^*
f∗。
f
∗
=
a
r
g
min
f
L
(
f
)
f^*=arg\min_{f}L(f)
f∗=argfminL(f)
w
∗
,
b
∗
=
a
r
g
min
w
,
b
L
(
w
,
b
)
=
a
r
g
min
w
,
b
∑
n
=
1
10
(
y
^
n
−
(
b
+
w
⋅
x
c
p
n
)
)
2
w^*,b^*=arg\min_{w,b}L(w,b)=arg\min_{w,b}\sum_{n=1}^{10}(\hat{y}^n-(b+w·x_{cp}^n))^2
w∗,b∗=argw,bminL(w,b)=argw,bminn=1∑10(y^n−(b+w⋅xcpn))2
梯度下降算法(Gradient Descent)
- 假设损失函数 L ( w ) L(w) L(w)只有一个参数 w w w, w ∗ = a r g min w L ( w ) w^*=arg\min_{w}L(w) w∗=argminwL(w)
- 随机选择一个初始值 w 0 w^0 w0。
- 计算 d L d w ∣ w = w 0 \frac{\mathrm{d}L}{\mathrm{d}w}|_{w=w^0} dwdL∣w=w0,即在 w 0 w^0 w0处的切线斜率。如果斜率为负,则增大 w w w(右移);如果斜率为正,则减小 w w w(左移)。得到更新后的 w 1 = w 0 − η d L d w ∣ w = w 0 w^1=w^0-\eta\frac{\mathrm{d}L}{\mathrm{d}w}|_{w=w^0} w1=w0−ηdwdL∣w=w0,其中改变量(step size)受当前斜率和学习率(learning rate) η \eta η影响, η \eta η越大训练速度越快。
- 计算 d L d w ∣ w = w 1 \frac{\mathrm{d}L}{\mathrm{d}w}|_{w=w^1} dwdL∣w=w1,得到更新后的 w 2 = w 1 − η d L d w ∣ w = w 1 w^2=w^1-\eta\frac{\mathrm{d}L}{\mathrm{d}w}|_{w=w^1} w2=w1−ηdwdL∣w=w1。
- 重复以上步骤,多次迭代直到某次切线斜率为0,可能达到局部最优而不是全局最优。但是在线性回归中不存在局部最优。
- 损失函数通常有两个参数 w ∗ , b ∗ = a r g min w , b L ( w , b ) w^*,b^*=arg\min_{w,b}L(w,b) w∗,b∗=argminw,bL(w,b)
- 随机选择一个初始值 w 0 , b 0 w^0,b^0 w0,b0。
- 计算 ∂ L ∂ w ∣ w = w 0 , b = b 0 \frac{\partial L}{\partial w}|_{w=w^0,b=b^0} ∂w∂L∣w=w0,b=b0, ∂ L ∂ b ∣ w = w 0 , b = b 0 \frac{\partial L}{\partial b}|_{w=w^0,b=b^0} ∂b∂L∣w=w0,b=b0,得到新的 w 1 w^1 w1 ← w 0 − η ∂ L ∂ w ∣ w = w 0 , b = b 0 w^0-\eta\frac{\partial L}{\partial w}|_{w=w^0,b=b^0} w0−η∂w∂L∣w=w0,b=b0, b 1 b^1 b1 ← b 0 − η ∂ L ∂ b ∣ w = w 0 , b = b 0 b^0-\eta\frac{\partial L}{\partial b}|_{w=w^0,b=b^0} b0−η∂b∂L∣w=w0,b=b0。
- 计算 ∂ L ∂ w ∣ w = w 1 , b = b 1 \frac{\partial L}{\partial w}|_{w=w^1,b=b^1} ∂w∂L∣w=w1,b=b1, ∂ L ∂ b ∣ w = w 1 , b = b 1 \frac{\partial L}{\partial b}|_{w=w^1,b=b^1} ∂b∂L∣w=w1,b=b1,得到新的 w 2 w^2 w2 ← w 1 − η ∂ L ∂ w ∣ w = w 1 , b = b 1 w^1-\eta\frac{\partial L}{\partial w}|_{w=w^1,b=b^1} w1−η∂w∂L∣w=w1,b=b1, b 2 b^2 b2 ← b 1 − η ∂ L ∂ b ∣ w = w 1 , b = b 1 b^1-\eta\frac{\partial L}{\partial b}|_{w=w^1,b=b^1} b1−η∂b∂L∣w=w1,b=b1
- 重复进行以上步骤。
梯度下降法中的梯度(Gradient)指的是 ∇ L = [ ∂ L ∂ w ∂ L ∂ b ] \nabla L=\begin{bmatrix}\frac{\partial L}{\partial w}\\ \frac{\partial L}{\partial b}\end{bmatrix} ∇L=[∂w∂L∂b∂L]
- 问题
初始点不同得到的结果也不同,有可能得到局部最优而非全局最优。但是线性回归的损失函数是不存在局部最优的,局部最优即全局最优。
- 偏微分的计算
L ( w , b ) = ∑ n = 1 10 ( y ^ n − ( b + w ⋅ x c p n ) ) 2 L(w,b)=\sum_{n=1}^{10}(\hat{y}^n-(b+w·x_{cp}^n))^2 L(w,b)=n=1∑10(y^n−(b+w⋅xcpn))2 ∂ L ∂ w = ∑ n = 1 10 2 ( y ^ n − ( b + w ⋅ x c p n ) ) ( − x c p n ) \frac{\partial L}{\partial w}=\sum_{n=1}^{10}2(\hat{y}^n-(b+w·x_{cp}^n))(-x_{cp}^n) ∂w∂L=n=1∑102(y^n−(b+w⋅xcpn))(−xcpn) ∂ L ∂ b = ∑ n = 1 10 2 ( y ^ n − ( b + w ⋅ x c p n ) ) \frac{\partial L}{\partial b}=\sum_{n=1}^{10}2(\hat{y}^n-(b+w·x_{cp}^n)) ∂b∂L=n=1∑102(y^n−(b+w⋅xcpn))
Result 结果
一次方程 y = b + w ⋅ x c p y=b+w·x_{cp} y=b+w⋅xcp
在训练样本上
y
=
−
188.4
+
2.7
⋅
x
c
p
y=-188.4+2.7·x_{cp}
y=−188.4+2.7⋅xcp
A
v
e
r
a
g
e
E
r
r
o
r
=
1
10
∑
n
=
1
10
e
n
=
31.9
AverageError=\frac{1}{10}\sum_{n=1}^{10}e^n=31.9
AverageError=101n=1∑10en=31.9在新样本上
A
v
e
r
a
g
e
E
r
r
o
r
=
1
10
∑
n
=
1
10
e
n
=
35.0
AverageError=\frac{1}{10}\sum_{n=1}^{10}e^n=35.0
AverageError=101n=1∑10en=35.0
二次方程 y = b + w 1 ⋅ x c p + w 2 ⋅ ( x c p ) 2 y=b+w_1·x_{cp}+w_2·(x_{cp})^2 y=b+w1⋅xcp+w2⋅(xcp)2
在训练样本上
y
=
−
10.3
+
1.0
⋅
x
c
p
+
2.7
×
1
0
−
3
⋅
(
x
c
p
)
2
y=-10.3+1.0·x_{cp}+2.7×10^{-3}·(x_{cp})^2
y=−10.3+1.0⋅xcp+2.7×10−3⋅(xcp)2
A
v
e
r
a
g
e
E
r
r
o
r
=
15.4
AverageError=15.4
AverageError=15.4在新样本上
A
v
e
r
a
g
e
E
r
r
o
r
=
18.4
AverageError=18.4
AverageError=18.4
多次方程
- 三次方程 y = b + w 1 ⋅ x c p + w 2 ⋅ ( x c p ) 2 + w 3 ⋅ ( x c p ) 3 y=b+w_1·x_{cp}+w_2·(x_{cp})^2+w_3·(x_{cp})^3 y=b+w1⋅xcp+w2⋅(xcp)2+w3⋅(xcp)3Average Error分别为15.3和18.1。
- 四次方程 y = b + w 1 ⋅ x c p + w 2 ⋅ ( x c p ) 2 + w 3 ⋅ ( x c p ) 3 + w 4 ⋅ ( x c p ) 4 y=b+w_1·x_{cp}+w_2·(x_{cp})^2+w_3·(x_{cp})^3+w_4·(x_{cp})^4 y=b+w1⋅xcp+w2⋅(xcp)2+w3⋅(xcp)3+w4⋅(xcp)4Average Error分别为14.9和28.8,在测试集上的效果反而比三次方程更差。
- 五次方程
y = b + w 1 ⋅ x c p + w 2 ⋅ ( x c p ) 2 + w 3 ⋅ ( x c p ) 3 + w 4 ⋅ ( x c p ) 4 + w 5 ⋅ ( x c p ) 5 y=b+w_1·x_{cp}+w_2·(x_{cp})^2+w_3·(x_{cp})^3+w_4·(x_{cp})^4+w_5·(x_{cp})^5 y=b+w1⋅xcp+w2⋅(xcp)2+w3⋅(xcp)3+w4⋅(xcp)4+w5⋅(xcp)5Average Error分别为12.8和232.1,在测试集上的效果更差。
高次方程可以表达的方程包含了低次方程可以表达的全部方程,因此在训练集上,方程次数越高、越复杂,拟合的效果越好。但是在测试集上,方程越复杂,预测效果却不一定更好,本例中三次方程的预测效果最好。模型不是越复杂越好,而是要选择最合适的模型,在本例中选三次方程最合适。
在训练集上效果好而在测试集上效果不好,称为过拟合现象(Over fitting)。
实例延申:增大样本数量
当样本数量
n
=
60
n=60
n=60时,规律发生变化,发现进化后的CP值受物种的影响。
Back to step 1: Redesign the Model 重新设计方程
用
x
s
x_s
xs代表宝可梦的物种,根据不同的宝可梦类型给出不同的模型。
If
x
s
x_s
xs = Pidgey →
y
=
b
1
+
w
1
⋅
x
c
p
y=b_1+w_1·x_{cp}
y=b1+w1⋅xcp
If
x
s
x_s
xs = Weedle →
y
=
b
2
+
w
2
⋅
x
c
p
y=b_2+w_2·x_{cp}
y=b2+w2⋅xcp
If
x
s
x_s
xs = Caterpie →
y
=
b
3
+
w
3
⋅
x
c
p
y=b_3+w_3·x_{cp}
y=b3+w3⋅xcp
If
x
s
x_s
xs = Eevee →
y
=
b
4
+
w
4
⋅
x
c
p
y=b_4+w_4·x_{cp}
y=b4+w4⋅xcp
这还是一个线性方程,相当于
y
=
b
1
⋅
δ
(
x
s
=
P
i
d
g
e
y
)
+
w
1
⋅
δ
(
x
s
=
P
i
d
g
e
y
)
x
c
p
+
b
2
⋅
δ
(
x
s
=
W
e
e
d
l
e
)
+
w
2
⋅
δ
(
x
s
=
W
e
e
d
l
e
)
x
c
p
+
b
3
⋅
δ
(
x
s
=
C
a
t
e
r
p
i
e
)
+
w
3
⋅
δ
(
x
s
=
C
a
t
e
r
p
i
e
)
x
c
p
+
b
4
⋅
δ
(
x
s
=
E
e
v
e
e
)
+
w
4
⋅
δ
(
x
s
=
E
e
v
e
e
)
x
c
p
y=b_1·\delta(x_s=Pidgey)+w_1·\delta(x_s=Pidgey)x_{cp} +b_2·\delta(x_s=Weedle)+w_2·\delta(x_s=Weedle)x_{cp}\\ +b_3·\delta(x_s=Caterpie)+w_3·\delta(x_s=Caterpie)x_{cp} +b_4·\delta(x_s=Eevee)+w_4·\delta(x_s=Eevee)x_{cp}
y=b1⋅δ(xs=Pidgey)+w1⋅δ(xs=Pidgey)xcp+b2⋅δ(xs=Weedle)+w2⋅δ(xs=Weedle)xcp+b3⋅δ(xs=Caterpie)+w3⋅δ(xs=Caterpie)xcp+b4⋅δ(xs=Eevee)+w4⋅δ(xs=Eevee)xcp其中
δ
(
x
s
=
P
i
d
g
e
y
)
=
{
1
x
s
=
P
i
d
g
e
y
0
o
t
h
e
r
w
i
s
e
\delta(x_s=Pidgey)=\begin{cases}1\ \ x_s=Pidgey\\0\ \ otherwise\end{cases}
δ(xs=Pidgey)={1 xs=Pidgey0 otherwise
分类模型训练结果
A
v
e
r
a
g
e
E
r
r
o
r
=
3.8
AverageError=3.8
AverageError=3.8
A
v
e
r
a
g
e
E
r
r
o
r
=
14.3
AverageError=14.3
AverageError=14.3优于上文中三次方程的模型。
但是还没有完全拟合,可能还有其它的因素影响宝可梦进化后的CP值,如weight、height、HP等等。
将其纳入考虑:
If
x
s
x_s
xs = Pidgey →
y
′
=
b
1
+
w
1
⋅
x
c
p
+
w
5
⋅
(
x
c
p
)
2
y'=b_1+w_1·x_{cp}+w_5·(x_{cp})^2
y′=b1+w1⋅xcp+w5⋅(xcp)2
If
x
s
x_s
xs = Weedle →
y
′
=
b
2
+
w
2
⋅
x
c
p
+
w
6
⋅
(
x
c
p
)
2
y'=b_2+w_2·x_{cp}+w_6·(x_{cp})^2
y′=b2+w2⋅xcp+w6⋅(xcp)2
……
y
=
y
′
+
+
w
9
⋅
x
h
p
+
w
10
⋅
(
x
h
p
)
2
+
w
11
⋅
x
h
+
w
12
⋅
(
x
h
)
2
+
w
13
⋅
x
w
+
w
14
⋅
(
x
w
)
2
y=y'++w_9·x_{hp}+w_{10}·(x_{hp})^2+w_{11}·x_h+w_{12}·(x_h)^2+w_{13}·x_w+w_{14}·(x_w)^2
y=y′++w9⋅xhp+w10⋅(xhp)2+w11⋅xh+w12⋅(xh)2+w13⋅xw+w14⋅(xw)2Average Error分别为1.9和102.3。该怎么选择去掉一些无关的特征,简化方程?正则化
Back to step 2: Regularization 正则化
原方程为
y
=
b
+
∑
n
w
i
x
i
y=b+\sum_{n}w_ix_i
y=b+n∑wixi原损失函数为
L
=
∑
n
(
y
^
n
−
(
b
+
w
⋅
x
c
p
n
)
)
2
L =\sum_{n}(\hat{y}^n-(b+w·x_{cp}^n))^2
L=n∑(y^n−(b+w⋅xcpn))2增加
λ
∑
(
w
i
)
2
\lambda \sum (w_i)^2
λ∑(wi)2,使新损失函数变为
L
=
∑
n
(
y
^
n
−
(
b
+
w
⋅
x
c
p
n
)
)
2
+
λ
∑
(
w
i
)
2
L =\sum_{n}(\hat{y}^n-(b+w·x_{cp}^n))^2+\lambda \sum (w_i)^2
L=n∑(y^n−(b+w⋅xcpn))2+λ∑(wi)2其中
λ
\lambda
λ是一个常数,手动设置。
参数值接近0的时候,方程是比较平滑的,输入对输出的影响相对不敏感。当输入变化
Δ
x
i
\Delta x_i
Δxi时,输出变化
w
i
Δ
x
i
w_i\Delta x_i
wiΔxi,
w
i
w_i
wi越接近于0,则输出变化越少。
平滑的方程受到噪声干扰较小,因此我们喜欢比较平滑的方程,即
∑
(
w
i
)
2
\sum (w_i)^2
∑(wi)2较小。
λ
\lambda
λ越大,得到的方程越平滑,方程在训练集上的Average Error越大,在测试集上的Average Error可能反而比较小。因为当
λ
\lambda
λ越大时,我们越多考虑
w
w
w本来的值,减少考虑Error,所以Training Error会越大。
但是如果方程太平滑了,会得到糟糕的结果。水平线是最平滑的,但它什么也做不成。
所以问题就是:我们希望得到的方程有多平滑。这可以通过调节
λ
\lambda
λ决定方程的平滑程度,本例中
λ
\lambda
λ选择100左右比较合适。
在做Regulation的时候,不需要考虑bias的值,b的值与方程的平滑程度无关。
小结
- 宝可梦进化后cp值基本取决于进化前的cp值和它的物种,但可能还有其它隐藏的因素
- 梯度下降
- 过拟合与正则化的做法
- 最终在测试集上得到Average Error为11.1