Machine Learining —— Regression:Case Study

问题导入:预测宝可梦的CP值

Estimating teh Combat Power(CP) of a pokemon after evolution
根据已有的宝可梦进化前后的信息,来预测某只宝可梦进化后的CP值大小

一、确定Senario、Task and Model

1、Senario

首先根据已有的data来确定Senario,已有一批宝可梦进化前后CP值的数据,input是进化前宝可梦的各种属性,output是进化后宝可梦的CP值;因此我们的data是labeled,使用的Senario是supervised Learning

2 、Task

根据我们想要的function的输出类型来确定Task,我们预期得到的是宝可梦进化后的CP值,是一个scalar,因此使用的Task是Regression

3、Model

关于Model的选择很多,这里采用的是Non-linear Model

4、设定参数

X X X:    表示一直宝可梦,用下标表示其属性
X c p X_{cp} Xcp:   表示宝可梦进化前的CP值
X s X_s Xs:    表示宝可梦的物种
X h p X_{hp} Xhp:  表示宝可梦的生命值
X w X_w Xw:  表示宝可梦重量
X h X_h Xh:   表示宝可梦高度
f ( ) f() f():     表示function
y y y:   表示function的output
在这里插入图片描述

二、Regression的具体步骤

1、明确Machine Learning的三个步骤:

  • 定义一个model即function set
  • 定义一个损失函数Loss评估goodness of function
  • 找到一个最好的function
Step1:Model(function set)

凭经验选择最初的function

Linear Model 线性模型

y = b + w ⋅ X c p y = b + w \cdot X_{cp} y=b+wXcp
y y y代表进化后的CP值, w w w b b b代表未知参数

根据不同的w和b,可以确定不同的无穷的function, y = b + w ⋅ X c p y = b + w \cdot X_{cp} y=b+wXcp是抽象出来的model,是具体化的function的集合,即function set

可将Linear Model扩展为不仅包括CP值:
y = b + Σ w i x i y = b +\Sigma w_ix_i y=b+Σwixi
x i x_i xi: An attribute of input X, called featrue(特征值)
w i w_i wi:weight of x i x_i xi
b b b: bias
在这里插入图片描述

Step2:Goodness of Function
参数说明

x i x^i xi:表示第i个宝可梦
y ^ i \widehat{y}^i y i:用 y ^ \widehat{y} y 表示实际观察到的object输出,上标为i表示第i个object
:由于Regression的输出值是scalar,因此 y ^ \widehat{y} y 里并没有component;但是之后若考虑structured Learning 时,output的object可能是有structured的,所以还是会需要用上下标表示一完整的output的object和其包含的component
在这里插入图片描述

Loss function 损失函数

为衡量function set中的某个function的好坏,需要一个Loss function,简称L,即function的function
L ( f ) = L ( w , b ) L(f) = L(w, b) L(f)=L(w,b)
input: a function
output: how bad/good it is

由于 f : y = b + w ⋅ X c p f : y = b + w \cdot X_{cp} f:y=b+wXcp , 即f是由w和b决定的,因此Loss function实际上是在衡量一组参数的好坏

Loss function的选择
最常用的方法是采用类似于方差和的形式来评估,即预测值与真实值差的平方和(Estimate error)
L ( f ) = L ( w , b ) = Σ n = 1 10 ( y ^ n − ( b + w ⋅ x c p n ) ) 2 L(f) = L(w, b)=\Sigma_{n=1}^{10}(\widehat{y}^n-(b +w\cdot x_{cp}^n))^2 L(f)=L(w,b)=Σn=110(y n(b+wxcpn))2
若是 L ( f ) L(f) L(f)越大,说明function表现越不好
在这里插入图片描述

Loss function可视化

下图是Loss function的可视化,图中每一点代表一组(w,b)对应一个function,而该点的颜色对应着loss function的结果L(w,b),颜色越偏红色代表function表现越不好,越偏蓝色代表Loss值越小
在这里插入图片描述

Step3:Pick the Best Function

选择最好的function:
f ∗ = a r g m i n f L ( f ) f^*=\mathop{argmin}\limits_f L(f) f=fargminL(f),或者
w ∗ , b ∗ = a r g m i n w , b L ( w , b ) = a r g m i n w , b Σ n = 1 10 ( y ^ n − ( b + w ⋅ x c p n ) ) 2 w^*,b^*=\mathop{argmin}\limits_{w,b} L(w,b)=\mathop{argmin}\limits_{w,b}\Sigma_{n=1}^{10}(\widehat{y}^n-(b +w\cdot x_{cp}^n))^2 w,b=w,bargminL(w,b)=w,bargminΣn=110(y n(b+wxcpn))2
在这里插入图片描述
为找到Best function,利用线性代数的知识,采用Gradient descent(梯度下降法)

Gradient Descent(梯度下降法)

gradient descent的优点在于,只要L(f)可微分,都可以用梯度下降法处理f,找到合适的parameters

单个参数时

以只带单个参数w的L(w)为例,首先要保证L(w)是可微的,实际上就是寻找L(w)斜率为0的global minima(有些函数也存在local minima)

  • 首先随机选取一个初始的点 w 0 w^0 w0
  • 计算 L L L w = w 0 w= w^0 w=w0位置的微分,即 d L d w \frac{\mathrm{d} L }{\mathrm{d} {w}} dwdL ∣ w = w 0 |_{w= w_0} w=w0
  • 如果斜率是negative负的,那么就应该增大w;如果斜率是positive正的,就应该减小w。每一步的步长step size的就是w的改变量
    step size的取值
    ①微分值 d L d w \frac{\mathrm{d} L }{\mathrm{d} {w}} dwdL的大小:微分值越大说明处在一个越陡峭的地方,那么移动的步长应该越大,反之越小
    η \eta η学习率(learning rate):如果 η \eta η越大,每移动一步,参数w的更新幅度就越大,反之越小
  • 每次参数更新的大小为 η d L d w \eta\frac{\mathrm{d}L}{\mathrm{d}w} ηdwdL,为了满足斜率为负时w向增大方向移动,斜率为正时w向减小方向移动,应当是原来的w减去更新的数值,即
    w 1 = w 0 − η d L d w w^1 = w^0-\eta\frac{\mathrm{d}L}{\mathrm{d}w} w1=w0ηdwdL ∣ w = w 0 |_{w= w_0} w=w0
    w 2 = w 1 − η d L d w w^2 = w^1-\eta\frac{\mathrm{d}L}{\mathrm{d}w} w2=w1ηdwdL ∣ w = w 1 |_{w= w_1} w=w1
    w 3 = w 2 − η d L d w w^3 = w^2-\eta\frac{\mathrm{d}L}{\mathrm{d}w} w3=w2ηdwdL ∣ w = w 2 |_{w= w_2} w=w2
    i f   d L d w if  \frac{\mathrm{d}L}{\mathrm{d}w} if dwdL ∣ w = w i = = 0 |_{w= w_i}== 0 w=wi==0
    t h e n then then s t o p stop stop
    此时的 w i w_i wi对应的斜率为0,当微分为0时,参数就不再更新,但是此时通过Gradient descent找出来solution其实并不一定是global minima
    但是在linear regression上,没有local minima
    在这里插入图片描述
多个参数时

关于宝可梦的问题,是包含two parameters的问题,即 ( w ∗ , b ∗ ) = a r g m i n w , b L ( w , b ) (w^*,b^*)=\mathop{argmin}\limits_{w,b}L(w,b) (w,b)=w,bargminL(w,b)

  • 首先随机选取两个初始值 w 0 , b 0 w^0,b^0 w0,b0
  • 然后分别计算( w 0 , b 0 w^0,b^0 w0,b0)点处的偏微分,即
  • ∂ L ∂ w \frac{\partial L}{\partial w} wL ∣ w = w 0 |_{w=w_0} w=w0, ∂ L ∂ b \frac{\partial L}{\partial b} bL ∣ b = b 0 |_{b=b_0} b=b0
  • 更新参数
    w 1 = w 0 − η ∂ L ∂ w w^1 = w^0-\eta\frac{\partial L}{\partial w} w1=w0ηwL ∣ w = w 0 , b = b 0 |_{w= w_0,b=b_0} w=w0,b=b0 b 1 = b 0 − η ∂ L ∂ b b^1 = b^0-\eta\frac{\partial L}{\partial b} b1=b0ηbL ∣ w = w 0 , b = b 0 |_{w= w_0,b=b_0} w=w0,b=b0
    w 2 = w 1 − η ∂ L ∂ w w^2 = w^1-\eta\frac{\partial L}{\partial w} w2=w1ηwL ∣ w = w 1 , b = b 1 |_{w= w_1,b=b_1} w=w1,b=b1 b 2 = b 1 − η ∂ L ∂ b b^2 = b^1-\eta\frac{\partial L}{\partial b} b2=b1ηbL ∣ w = w 1 , b = b 1 |_{w= w_1,b=b_1} w=w1,b=b1
    w 3 = w 2 − η ∂ L ∂ w w^3 = w^2-\eta\frac{\partial L}{\partial w} w3=w2ηwL ∣ w = w 2 , b = b 2 |_{w= w_2,b=b_2} w=w2,b=b2 b 3 = b 2 − η ∂ L ∂ b b^3 = b^2-\eta\frac{\partial L}{\partial b} b3=b2ηbL ∣ w = w 2 , b = b 2 |_{w= w_2,b=b_2} w=w2,b=b2

可视化效果如图
在这里插入图片描述
每次计算得到的梯度gradient,即由 ∂ L ∂ w \frac{\partial L}{\partial w} wL ∂ L ∂ b \frac{\partial L}{\partial b} bL组成的vector向量,就是图上等高线的法线方向;而( − η ∂ L ∂ w -\eta\frac{\partial L}{\partial w} ηwL, − η ∂ L ∂ b -\eta\frac{\partial L}{\partial b} ηbL)的作用就是让原先的( w i , b i w^i,b^i wi,bi)朝着gradient的方向前进,其中 η \eta η的作用是每次更新的跨度
:这里两个方向的 η \eta η必须保持一致,这样每次更新坐标的step size是等比缩放的,保证前进的方向始终和梯度下降的方向一致,否则坐标前进的方向将会发生偏移

在linear regression里,loss function是convex的(凸函数),没有local optimal局部最优解,只有global optimal

三、Pokemon问题

根据gradient descent,计算得到 y = b + w ⋅ x c p y = b+w\cdot x_{cp} y=b+wxcp中最好的参数是b=-188.4,w=2.7
接着将training data中每一只宝可梦i进化后的CP值与预测值之差的绝对值称为 e i e^i ei,而这些误差之和Average Error on Training Data is Σ i = 1 10 e i = 31.9 \Sigma_{i=1}^{10}e^i=31.9 Σi=110ei=31.9
用这个function应用在generalization的case中,于是有抓了10只新的pokemon,算出Average Error on Testing Data is Σ i = 1 10 e i = 35 \Sigma_{i=1}^{10}e^i=35 Σi=110ei=35
在这里插入图片描述

How can we do better

重新设计Model

考虑 ( x c p ) 2 (x_{cp})^2 (xcp)2的model

在这里插入图片描述

考虑 ( x c p ) 3 (x_{cp})^3 (xcp)3的model

在这里插入图片描述

考虑 ( x c p ) 4 (x_{cp})^4 (xcp)4的model

在这里插入图片描述

考虑 ( x c p ) 5 (x_{cp})^5 (xcp)5的model

在这里插入图片描述
这5个model在training data的表现 ( x c p ) i (x_{cp})^i (xcp)i的高次项的增加,对应的average error会不断减小
在这里插入图片描述
在training data上,model越复杂,error就会越低;但是在testing data上,model复杂到一定程度后,error非但不会减小,反而会暴增,通常被称为overfitting(过拟合)
在这里插入图片描述

进一步讨论其他参数

物种 x s x_s xs的影响

除CP值外,还可能受到物种 x s x_s xs的影响
在这里插入图片描述
于是需要重现设计model:
i f x s = p i d g e y : if \quad x_s = pidgey: ifxs=pidgey:      y = b 1 + w 1 ⋅ x c p y = b_1+w_1\cdot x_{cp} y=b1+w1xcp
i f x s = W e e d l e : if \quad x_s = Weedle: ifxs=Weedle:     y = b 2 + w 2 ⋅ x c p y = b_2+w_2\cdot x_{cp} y=b2+w2xcp
i f x s = C a t e r p i e : if \quad x_s = Caterpie: ifxs=Caterpie:     y = b 3 + w 3 ⋅ x c p y = b_3+w_3\cdot x_{cp} y=b3+w3xcp
i f x s = E e v e e : if \quad x_s = Eevee: ifxs=Eevee:      y = b 4 + w 4 ⋅ x c p y = b_4+w_4\cdot x_{cp} y=b4+w4xcp
将上面的if语句合并linear model:
在这里插入图片描述
利用新的model,分别得到在training data和testing data上测试的结果:在这里插入图片描述

HP值 x h p x_{hp} xhp、height值 x h x_h xh、weight值 x w x_w xw的影响

考虑所有的可能影响参数,设计出更为复杂的model:
i f x s = p i d g e y : if \quad x_s = pidgey: ifxs=pidgey:      y = b 1 + w 1 ⋅ x c p + w 5 ⋅ ( x c p ) 2 y = b_1+w_1\cdot x_{cp}+ w_5\cdot(x_{cp})^2 y=b1+w1xcp+w5(xcp)2
i f x s = W e e d l e : if \quad x_s = Weedle: ifxs=Weedle:     y = b 2 + w 2 ⋅ x c p + w 6 ⋅ ( x c p ) 2 y = b_2+w_2\cdot x_{cp}+ w_6\cdot(x_{cp})^2 y=b2+w2xcp+w6(xcp)2
i f x s = C a t e r p i e : if \quad x_s = Caterpie: ifxs=Caterpie:     y = b 3 + w 3 ⋅ x c p + w 7 ⋅ ( x c p ) 2 y = b_3+w_3\cdot x_{cp}+ w_7\cdot(x_{cp})^2 y=b3+w3xcp+w7(xcp)2
i f x s = E e v e e : if \quad x_s = Eevee: ifxs=Eevee:      y = b 4 + w 4 ⋅ x c p + w 8 ⋅ ( x c p ) 2 y = b_4+w_4\cdot x_{cp}+ w_8\cdot(x_{cp})^2 y=b4+w4xcp+w8(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\cdot x_{hp}+w_{10}\cdot (x_{hp})^2+w_{11}\cdot x_{h}+w_{12}\cdot (x_{h})^2+w_{13}\cdot x_{w}+w_{14}\cdot (x_{w})^2 y=y+w9xhp+w10(xhp)2+w11xh+w12(xh)2+w13xw+w14(xw)2
算出的training error = 1.9,但是testing data = 102.3,发生了overfitting

利用regularization解决overfitting(L2正则化解决过拟合问题)

regularization可以使曲线变得更加smooth

原来的loss function 只考虑了prediction error;而regularization则是在原来的loss function的基础上加上一项 λ Σ ( w i ) 2 \lambda\Sigma(w_i)^2 λΣ(wi)2,把这个model里面所有的 w i w_i wi的平方和用 λ \lambda λ 加权,也就是说,我们期待 w i w_i wi越小甚至接近于0的function
因为参数值接近0的function,是比较平滑的,当input有变化时,output对输入的变化比较不敏感
在这里插入图片描述
此处的 λ \lambda λ需要手动进行调整
λ \lambda λ值越大代表考虑smooth的那个regularization那一项影响越大,function越平滑
在这里插入图片描述
:我们期待比较平滑的function,因为它对noise不那么sensitive;但是function太平滑的话就失去了对data的拟合能力;而function的平滑程度,需要通过调整 λ \lambda λ来决定

Conclusion总结

关于pokemon的CP值预测流程:

  • 根据已有的data的特点,确定使用supervised learning(监督学习)
  • 根据output的特点,确定使用regression(回归)
  • 考虑包括进化前CP值、species、hp等各方面变量属性已经高次项的影响,model采用更为复杂的一次项和二次型之和形式
    为了保证function的平滑性,loss function应使用regularization即
    L = Σ i = 1 n ( y ^ i − y i ) 2 + λ Σ j ( w j ) 2 L= \Sigma_{i=1}^n(\widehat{y}^i-y^i)^2+\lambda\mathop{\Sigma}\limits_j(w_j)^2 L=Σi=1n(y iyi)2+λjΣ(wj)2
  • 利用gradient descent对regularization版本的loss function进行梯度下降迭代处理
    假设所有的参数合成一个vector: [ w 0 , w 1 , w 2 , . . . , w j , . . . , b ] T [w_0,w_1,w_2,...,w_j,...,b]^T [w0,w1,w2,...,wj,...,b]T,那么每次梯度下降的表达式为:
    梯 度 : ∇ L = [ ∂ L ∂ w 0 ∂ L ∂ w 1 ∂ L ∂ w 2 ⋮ ∂ L ∂ w j ⋮ ∂ L ∂ b ] g r a d i e n t g r a d i e n t d e s c e n t = [ w 0 ' w 1 ' w 2 ' ⋮ w j ' ⋮ b ' ] L = L ' = [ w 0 w 1 w 2 ⋮ w j ⋮ b ] L = L 0 − η [ ∂ L ∂ w 0 ∂ L ∂ w 1 ∂ L ∂ w 2 ⋮ ∂ L ∂ w j ⋮ ∂ L ∂ b ] L = L 0 梯度:\nabla L= \begin{bmatrix} \frac{\partial L}{\partial w_0} \\ \frac{\partial L}{\partial w_1} \\ \frac{\partial L}{\partial w_2} \\ \vdots \\ \frac{\partial L}{\partial w_j} \\ \vdots \\ \frac{\partial L}{\partial b} \\ \end{bmatrix} _{gradient} \quad gradient descent = \begin{bmatrix} w_0^' \\ w_1^' \\ w_2^' \\ \vdots \\ w_j^' \\ \vdots \\ b^' \\ \end{bmatrix} _{L=L^'} \quad = \begin{bmatrix} w_0 \\ w_1 \\ w_2 \\ \vdots \\ w_j \\ \vdots \\ b \\ \end{bmatrix} _{L=L_0} \quad - \eta \begin{bmatrix} \frac{\partial L}{\partial w_0} \\ \frac{\partial L}{\partial w_1} \\ \frac{\partial L}{\partial w_2} \\ \vdots \\ \frac{\partial L}{\partial w_j} \\ \vdots \\ \frac{\partial L}{\partial b} \\ \end{bmatrix} _{L=L_0} L=w0Lw1Lw2LwjLbLgradientgradientdescent=w0w1w2wjbL=L=w0w1w2wjbL=L0ηw0Lw1Lw2LwjLbLL=L0
  • λ \lambda λ 需要我们不断调整来获取
    先设定 λ \lambda λ -->确定loss function -->找到使loss最小的 [ w 0 , w 1 , w 2 , . . . , w j , . . . , b ] T [w_0,w_1,w_2,...,w_j,...,b]^T [w0,w1,w2,...,wj,...,b]T -->确定function -->计算error -->重新设定 λ \lambda λ重复上述步骤 -->使testing data上的error最小的 λ \lambda λ所对应的 [ w 0 , w 1 , w 2 , . . . , w j , . . . , b ] T [w_0,w_1,w_2,...,w_j,...,b]^T [w0,w1,w2,...,wj,...,b]T对应的function就是最佳function

参考原链接:link
https://github.com/Sakura-gh/ML-notes

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值