李宏毅机器学习Task02

李宏毅机器学习Task02

本次任务重点关注机器学习在回归问题中的应用,李老师很接地气的采用预测宝可梦CP值的例子,讲课生动的同时让我上手体验了机器学习的一般步骤。

回归

在统计学中,我们其实已经接触过回归的概念,回归的任务就是找到一个能够针对输入,准确预测出输出值的函数。

回归举例

问题描述

在PokemenGo这款游戏中,有很多不同的宝可梦,我们可以收集材料进化宝可梦,CP值作为衡量宝可梦能力的重要指标也会随着进化而提高,本次的任务就是预测进化之后的宝可梦的CP值。当输入只有一个参数时为一元输入问题,当输入参数变多时为多元输入问题。

  • 一元输入:宝可梦进化前CP值。
  • 多元输入:宝可梦进化前CP值、物种、血量、重量、高度。
  • 输出:宝可梦进化后CP值。
解决问题

按照机器学习解决问题的三个步骤依次解决这一问题:

步骤1.模型假设-线性模型

根据已有数据我们能够看出可以用线性模型来描述:
y = f ( x i ) = b + ∑ i w i x i y=f(x_i)=b+\sum_{i}^{}{w_ix_i} y=f(xi)=b+iwixi

  • x i x_i xi:输入的特征
  • w i w_i wi:各个特征对应的权重
  • b i b_i bi:偏差
  • y i y_i yi:最终的预测值
步骤2.模型评估-损失函数

有了这些真实的数据,那我们怎么衡量模型的好坏呢?采用的方法很熟悉,用简单的真实值与模型预测值之差然后平方(消除符号影响)衡量模型的好坏。损失函数L定义如下:
L ( f ) = ∑ n ( y ^ n − y n ) 2 L(f)=\sum_{n}^{}(\widehat{y}^n-y^n)^2 L(f)=n(y nyn)2

在一元情况下,我们将模型代入,最终的损失函数定义为:
L ( f ) = ∑ n ( y ^ n − ( b + w x c p n ) ) 2 L(f)=\sum_{n}^{}(\widehat{y}^n-(b+wx_{cp}^{n}))^2 L(f)=n(y n(b+wxcpn))2

y ^ \widehat{y} y :已有的宝可梦CP值

步骤3.最佳模型-梯度下降法

模型有了,模型的评估方法有了,我们的任务就是找到损失函数值最小的模型,方法就是梯度下降法。

梯度概念复习

在高等数学以及多门专业课中,我接触过梯度的概念。

梯度的本意是一个向量(矢量),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(梯度的方向)变化最快,变化率最大(为该梯度的模)。

g r a d f ( x , y ) = ∇ f ( x , y ) = ∂ f ∂ x i ⃗ + ∂ f ∂ y j ⃗ gradf(x,y)=\nabla f(x,y)=\frac{\partial f}{\partial x}\vec{i}+\frac{\partial f}{\partial y}\vec{j} gradf(x,y)=f(x,y)=xfi +yfj

梯度下降法解决本问题

梯度下降法的实质就是找出变化最快的方向,问题就是先为w,b随意取一个值,然后通过误差函数的偏微分(梯度)来更新w,b值,这里引入学习率 η \eta η的概念,通过不断的迭代,更新w与b的值。
w 1 = w 0 − η ∂ L ∂ w w^1=w^0-\eta\frac{\partial L}{\partial w} w1=w0ηwL

b 1 = b 0 − η ∂ L ∂ b b^1=b^0-\eta\frac{\partial L}{\partial b} b1=b0ηbL

试着运行P4中的代码,尝试调整了一下 η \eta η与迭代步数,发现在较小的 η \eta η可以通过增多迭代步数(笔者为原来10倍)的方式来找到最佳值(图中已做标记)

在这里插入图片描述

lr0.000001,步骤:100000

在这里插入图片描述

lr0.000001,步骤:1000000

适当提高 η \eta η值时可以有益于学习,但是当 η \eta η值太大会导致找不到正确结果

在这里插入图片描述

lr0.000005,步骤:100000

在这里插入图片描述

lr0.00001,步骤:100000

猜测这里是lr值太大,乘上偏导导致数据变化速度太快,以致越过了需要拐弯的点,这里告诉我们,如果 η \eta η的值取大了,会导致学习失败,不能一个包子一口搞定,得慢慢来。

梯度下降法的问题
  • 问题1:当前最优 一个函数有可能不止一个极值点。
  • 问题2:梯度为0 偏导等于0,无法更新。
  • 问题3:梯度趋近于0 偏导趋近0,数值更新不动。

在线性模型里面都是一个碗的形状(山谷形状),梯度下降基本上都能找到最优点,但是再其他更复杂的模型里面,就会遇到问题2和问题3了。

结果检验

我们找到了自己认为的最佳 w ∗ w^* w b ∗ b^* b,那么他们的实际效果如何?

我们使用平均误差来验证模型的好坏定义如下
e = ∑ n ( y ^ n − ( b ∗ + w ∗ x c p n ) / n e=\sum_{n}^{}(\widehat{y}^n-(b^*+w^*x_{cp}^{n})/n e=n(y n(b+wxcpn)/n

显然,e的值越小,预测的效果越好,按照上述步骤算下来,运用10个数据,最终的平均误差为35。

方法优化
步骤一优化:采用1元n次线性模型

采用二次模型:
y = b + w 1 x c p + w 2 x c p 2 y=b+w_1x_{cp}+w_2x_{cp}^2 y=b+w1xcp+w2xcp2
最后的平均误差为18.4,效果略好。

  • 过拟合问题出现

接着提高模型采用的次数,我们能够发现,并不是次数越高,误差值越小,也许会随着次数的升高,误差值变大,这种现象称为过拟合现象。

步骤一优化:模型改进,引入分类

通过将不同种类宝可梦分组,来改进模型,可以发现,最后的误差减小很多

具体的实施方法就是加入一个信号处理上的阶跃函数。

在这里插入图片描述

步骤一优化:引入更多参数

将血量、重量、高度也加入到模型中考虑,变成了一个多元线性模型。

不过最后的误差结果显示引入更多参数之后,误差竟然增大,说明也许这些参数并不需要考虑。

步骤三优化:加入正则化

将最终的损失函数改为
L ( f ) = ∑ n ( y ^ n − ( b + w x c p n ) ) 2 + ∑ λ ( w i ) 2 L(f)=\sum_{n}^{}(\widehat{y}^n-(b+wx_{cp}^{n}))^2+\sum\lambda(w_i)^2 L(f)=n(y n(b+wxcpn))2+λ(wi)2

  • w 越小,越平滑, 输出值与输入值相差不大。

  • 很多应用场景中,并不是 w 越小模型越平滑越好,但是经验值告诉我们 w 越小大部分情况下都是好的。

  • b 的值接近于0 ,对曲线平滑是没有影响。

回归的其它应用

回归的实际应用有很多,除去课上的自动驾驶,股市预测等,还有:

  • 钢材需求量预测

    • 输入:往年原油产量、生铁产量、原煤产量、发电量。
    • 输出:今年钢材的需求量。
  • 公司的销售额预测

    • 输入:往年销售额,促销活动情况。
    • 输出:今年销售额。

回归的其它应用

回归的实际应用有很多,除去课上的自动驾驶,股市预测等,还有:

  • 钢材需求量预测

    • 输入:往年原油产量、生铁产量、原煤产量、发电量。
    • 输出:今年钢材的需求量。
  • 公司的销售额预测

    • 输入:往年销售额,促销活动情况。
    • 输出:今年销售额。

我个人觉得回归是一种很依赖数据的模型,如果说数据本身就没什么规律,回归的应用可能也就比较有限。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值