《机器学习》学习笔记(一)-- Regression

  1. Regression
  2. Gradient Descent
  3. Reduce Error
  4. Regularization
  5. conclusion

1.案例引入
在李宏毅老师的课程中,以宝可梦为例子
设定具体参数
在这里插入图片描述
Regress的具体过程
1.定义一个函数集合
2.定义Loss函数取评估function的好坏,Loss越小,函数越好
3.找到一个最好的函数模型

Step1.定义函数模型
在课中主要使用了线性模型
即:y = b + w·Xcp
(y代表进化后的cp值,Xcp代表进化前的值,b,w为参数,这里w主要为权重(weight),b为偏置值(bias))
从上式可以看出,根据w和b的不同,可以确定无穷多的y,即无穷多的function
而线性公式根据取值的点多少,可以扩展为
y=b+∑wi·xi

step2.计算函数模型的好坏(Goodness of Function)
为了衡量function set中的某个function的好坏,我们需要一个评估函数,即Loss function(损失函数)
损失函数主要是用预测值与真值差的平方和的数值来估测数值的平方
如果L(f)越大,说明该function变现的越不好,L(f)越小,说明funtion变现的越好
在这里插入图片描述
途中变现的是某点的变现好坏,越偏红色代表Loss的数值越大,变现越差。越偏蓝色代表Loss的数值越小,变现越好。

Step3.找到最好的方法(Pick the best Function)
理论上来说,只要找到偏差值最小Loss值的函数方程式,便找到了最好的函数
f ∗ = argminL(f)
或者是:
在这里插入图片描述
而如何找到最小的Loss值,我们可以使用
– Gradient descent(梯度下降法)

2.Gradient Descent–梯度下降

单个参数的情况
以单个参数w的Loss Function为例,首先保证L(w)是可微的
w = arg min L(w)*
实际上就是寻找切线L斜率为0的global minima最小值点

在这里插入图片描述

Gradient Descent的主要步骤如下:

  • 首先选取也各初始点w0
  • 计算L在w=w0点的微分,即dl/dw(w=w0),即切线在点w0的斜率
  • 如果斜率是负的,就应该使w变大,如果是正的就应该让w变小,每一步的部长step size就是w的改变量

而w的step size大小主要取决于两件事

  1. 微分值dL/dw的大小,微分值越大表示越陡峭,移动距离要越大,反之则越小
  2. 一个常数项η,被称为learning rate(学习率),如果η比较大,w的更新幅度比较大,反之更新幅度比较小(如果learining rate设置的比较大,那机器学习的速度比较快,但是也有可能会跳过最适合的global minima的点)

因此每次参数更新的大小为η*(dl/dw)
在这里插入图片描述
但是随之而来也有一个问题,如果微分为0的时候,参数就会一直卡在这个点上没办法更新,而该点不一定是glbol minima,所以通过gradient descent找出来的方法不一定是最佳解
但是在线性回归的问题上,是没有local minima的,因此可以使用梯度下降方法

两个参数的问题
跟一个参数的处理步骤差距不大,对于w和b分别计算偏微分,并且分别更新
在这里插入图片描述
实际上,L的gradient就是微积分中的梯度概念:
在这里插入图片描述
对于两个参数的问题,可以可视化为如下:
在这里插入图片描述
(横坐标为b,纵坐标为w,颜色代表loss的值)

每次计算到的梯度gradient,即是b和w微分组成的vector向量,就是该等高线的法线方向。而乘-η的作用就是让原来的向量朝着等高线法线的方向前进,η一样代表着每次的更新跨度,经过多次迭代,最终达到极小值点
在这里插入图片描述

对于宝可梦的结果,根据上述式子,可得到结果。
根据training data(用已有的结果估测)例的每一只宝可梦i进化后的实际cp值于预测值之差的绝对值为ei,而这些误差之和为31.9

而当我们用当前模型取估测新抓到的宝可梦的是后,这才是我们真正关心的函数的作用。也就是所谓的testing data的误差

3.如何减少误差?

3.1我们可以加大函数式的次数,也就是将直线变成曲线函数。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
由上图可以看出,随着x的高次项的增加,函数的Traning data会不断减少,但是从4次式开始,testing data却开始暴增/这种情况通常被称为overfitting(过拟合)

因此对于函数的选择,并不是越复杂越好,而是选择一个最适合的,比如上图的三次式。

3.2考虑其他属性对于最终数据的影响
我们可以考虑以下更多的属性,比如体重等信息,在对这些属性设计不同的linear model
在这里插入图片描述
从上图可以看到,引入了δ(条件表达式)的概念,当条件表达式为True,值为1,反之则为0.
在这里插入图片描述
可以看出对于traing data的误差有减少,但是对于testing data的误差却比较大。也就是很大概率会发生overfitting。

对于这种问题,我们可以使用正则化来解决!!

4.Regularization
在原来的lossfunction上加上每项wi的平方累加。并且对该model里面所有的wi平方用λ加权
在这里插入图片描述
对于上述公式,我们可以发现wi越接近0,我们所得到的Loss值越小,也就是我们期待参数值接近0的function(比较平滑的);相对平滑的意思式,当输入有变化时,ouput对输入的变化比较不敏感。

举例来书,对于y = b + ∑wixi的这个model,当inout变化Δxi,output的变化就是wiΔxi。也就是说,如果wi越小越接近0的画,输出对输入就越不敏感,我们的function也就越光滑。而这些变化并不会把bias考虑进去,因为bias只会把function在y轴方向上下移动。

为什么function越平滑越好?
如果输出对输入不敏感的话,测试的时候,一些noises噪声对平滑function的影响就比较少

关于λ的取值问题
λ值越大代表考虑smooth的哪个regularization哪一项的影响力越大,我们找到的function也就越平滑。

当λ越大时,training data上得到的error其实是越大的,但是也是合理的,因为当λ越大时,我们越倾向考虑w的值而越少考虑error的大小,但是反之,testing error却可能比较少
因此,虽然我们喜欢平滑的function,但也不能太过平滑,否则就失去了对data的你和能力

5.CONCLUSION
关于对pokemon的cp值预测的流程总结:

  • 根据已有的data特点,确定使用supervised learning监督学习

  • 根据ouput的特点,确定使用regression回归

  • 考虑要考虑的属性和函数的复杂函数,制定函数而

  • 为了保证函数的平滑性,loss function使用regularization

  • 更新gradient descent的值,即利用其对regularization版本的loss function进行梯度下降迭代处理,每次迭代都减去L对该参数的微分和learning rate的积
    在这里插入图片描述
    当梯度稳定不变为0时,则梯度下降停止

  • 调整regularization中的λ值,零函数平滑时也不会完全不拟合training data

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值