【学习笔记】李宏毅老师机器学习2020_Regression

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+wxcp其中 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=110(y^nf(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=110(y^n(b+wxcpn))2用真正的输出 y ^ n \hat{y}^n y^n减去预测的输出 b + w ⋅ x c p n b+w·x_{cp}^n b+wxcpn再平方,得到估测的误差。本例中共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=110(y^n(b+wxcpn))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)
  1. 随机选择一个初始值 w 0 w^0 w0
  2. 计算 d L d w ∣ w = w 0 \frac{\mathrm{d}L}{\mathrm{d}w}|_{w=w^0} dwdLw=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ηdwdLw=w0,其中改变量(step size)受当前斜率和学习率(learning rate) η \eta η影响, η \eta η越大训练速度越快。
  3. 计算 d L d w ∣ w = w 1 \frac{\mathrm{d}L}{\mathrm{d}w}|_{w=w^1} dwdLw=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ηdwdLw=w1
  4. 重复以上步骤,多次迭代直到某次切线斜率为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)
  1. 随机选择一个初始值 w 0 , b 0 w^0,b^0 w0,b0
  2. 计算 ∂ L ∂ w ∣ w = w 0 , b = b 0 \frac{\partial L}{\partial w}|_{w=w^0,b=b^0} wLw=w0,b=b0, ∂ L ∂ b ∣ w = w 0 , b = b 0 \frac{\partial L}{\partial b}|_{w=w^0,b=b^0} bLw=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ηwLw=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ηbLw=w0,b=b0
  3. 计算 ∂ L ∂ w ∣ w = w 1 , b = b 1 \frac{\partial L}{\partial w}|_{w=w^1,b=b^1} wLw=w1,b=b1, ∂ L ∂ b ∣ w = w 1 , b = b 1 \frac{\partial L}{\partial b}|_{w=w^1,b=b^1} bLw=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ηwLw=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ηbLw=w1,b=b1
  4. 重复进行以上步骤。

梯度下降法中的梯度(Gradient)指的是 ∇ L = [ ∂ L ∂ w ∂ L ∂ b ] \nabla L=\begin{bmatrix}\frac{\partial L}{\partial w}\\ \frac{\partial L}{\partial b}\end{bmatrix} L=[wLbL]

  • 问题
    初始点不同得到的结果也不同,有可能得到局部最优而非全局最优。但是线性回归的损失函数是不存在局部最优的,局部最优即全局最优。
    在这里插入图片描述
  • 偏微分的计算
    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=110(y^n(b+wxcpn))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) wL=n=1102(y^n(b+wxcpn))(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)) bL=n=1102(y^n(b+wxcpn))

Result 结果

一次方程 y = b + w ⋅ x c p y=b+w·x_{cp} y=b+wxcp

在训练样本上
在这里插入图片描述
y = − 188.4 + 2.7 ⋅ x c p y=-188.4+2.7·x_{cp} y=188.4+2.7xcp 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=110en=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=110en=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+w1xcp+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.0xcp+2.7×103(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+w1xcp+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+w1xcp+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+w1xcp+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+w1xcp
If x s x_s xs = Weedle → y = b 2 + w 2 ⋅ x c p y=b_2+w_2·x_{cp} y=b2+w2xcp
If x s x_s xs = Caterpie → y = b 3 + w 3 ⋅ x c p y=b_3+w_3·x_{cp} y=b3+w3xcp
If x s x_s xs = Eevee → y = b 4 + w 4 ⋅ x c p y=b_4+w_4·x_{cp} y=b4+w4xcp

这还是一个线性方程,相当于
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+w1xcp+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+w2xcp+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++w9xhp+w10(xhp)2+w11xh+w12(xh)2+w13xw+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+nwixi原损失函数为 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+wxcpn))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+wxcpn))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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值