admin 管理员组

文章数量: 1184232

机器学习笔记(二)

1、为什么要预测神奇宝贝的CP值?

CP(Combat Power)值指的是一只神奇宝贝的战斗力,每个神奇宝贝有初始CP值,在抓到一个神奇宝贝后投喂糖果之后就会进化,CP值增加。如果可以精确的预测一只神奇宝贝进化后的CP值,就可以提前决定是否进化这只神奇宝贝,放弃投喂进化后CP值较低的神奇宝贝。

2、Step 1: Model

用X表示一只神奇宝贝,Xcp表示神奇宝贝进化前的CP值,Xs表示神奇宝贝是哪种物种,Xhp表示神奇宝贝的生命值,Xw表示神奇宝贝的重量,Xh表示神奇宝贝的身高,y表示进化后的神奇宝贝的CP值。
比如说,存在这样的函数关系:y=b + w * Xcp,其中b、w是人以参数。可带入任意参数,如下图:

这样就可以得到很多function,其中有些是合理的,有些是很不合理的。这个Model属于Linear model,可以表示成:y=b + ∑WiXi ,其中Xi可以是Xcp、Xhp、Xw、Xh,Wi表示weight,b表示bias因为进化后的CP值可能和这些中的某一项有关,详解如下图:

3、Step 2:Goodness of Function

第二步需要我们判断一个function的好坏,怎么做呢?首先我们需要收集一些训练的资料。这个训练的资料会显示出function的input和output之间的对应。即真的需要去抓一些神奇宝贝,投喂糖果后,看他进化后的CP值。y^表示进化后的真实的CP值。需要多组数据,捕捉多个神奇宝贝。如下图:

假设捕捉十只神奇宝贝,把这十只神奇宝贝原始的CP值以及进化后的CP值画出来就是:如下图:

接下来就可以衡量一个function好坏,其中需要另一个function,也就是需要定义一个 Loss function L,如:

由于function f实际上是由w和b决定的,因为y=b + w * Xcp,所以上面的公式也可以写成:


如果把Loss function L画出来就是下图,其中每个点都是一个function,颜色表示Loss的value,其中红色表示非常的大,蓝色代表Loss的value比较小。图中打叉的地方就是最小的loss大致位置,接下来就是找出它。

4、Step 3 : Best Function

我们需要找一个 f 使得 L(f) 的值最小,记作 f*。如图:

接下来就是需要解出上面的公式,用到线性代数的知识。但是这种方法只对Linear regression有用,其他配置不适用。所以介绍一种更加general的方法,即Gradient Descent(梯度下降)
Gradient Descent(梯度下降)

一、考虑Loss function L现在只和w有关,画出他们的关系图,可以直观的看出哪个w可以使得loss最小。或者更有效的方法,也就是Gradient Descent。首先随机找一个初始位置W0,接下来计算w在W0这个位置对L的微分(也就是找切线的斜率),当其值小于零时,左高右低,应该增加w的值来减小loss,相反同理。如图:

就这样一直计算移动,直到w等于0,这是就卡住了。但是可能选择不同的初始点,最终会停在不同的极小值点,Gradient Descent不能保证每次都可以找到global minima,如图:

二、 现在考虑Loss function L和w、b两个参数有关,如图:

画图出来就是下图,其中颜色代表Loss function的数值,每个点代表一个function。任意选择一点,在该点分别对w和b做偏微分,乘以负lamaga之后得出一个向量,向量会指向等高线的法线方向。更新点后,继续计算偏微分。直到计算出来的偏微分等于0,没有办法前进。

三、存在问题

在一的图中可以明显的发现,有些地方的斜率(微分)结果为0,但是,他可能距离最佳的损失值还很远。如果今天做的是Linear regression(线性回归)的话,就不需要太担心这个问题,因为Linear regression定义的Loss function,它是一个碗的形状,从碗的任意一个地方放球,他都会滚到碗的中间。但是对于更加复杂的model需要考虑着各种体。

5、结果

如果y=b + w * Xcp,大概b = -188.4,w = 2.7(即打叉的位置)的时候,损失值是最小的。下图中的红线就是带入参数后的function的直线。图中e1,e2…表示出错大小。如下图:


之后把所有的e平均起来,得到一个值,即:

但是,我们真正在意的并不是我们已经抓到这些具有真实进化数据的神奇宝贝,我们想要知道的是它对从来没有出现过的神奇宝贝进化后的CP值的预测是否准确。最终,又找来十只从未见过的神奇宝贝做预测,得到的平均错误数据为35.0,大于31.9。如图:

6、 模型复杂化结果

之前我们假设的是y = b + w * Xcp,现在选择另一个复杂一点的model,y=b + W1Xcp + W2(Xcp)2,此时仍然是Linear Model,所谓Linear Model 就是它的参数对它的Output是不是Linear。会发现Average Error明显好多了。如下图:

这时如果一直继续选择更加复杂的model,如:就会发现,训练的Average Error依然是降低的,但是测试的Average Error又升高了。如下图:


所以,一个更复杂的model,不一定会带来更好地结果。这就是过拟合

7、影响进化后的CP值的其他因素

当我们不仅只抓十只神奇宝贝,增加神奇宝贝的数量时会发现,影响CP值的还有其他的,如:神奇宝贝的种类。所以之前的model推翻,重新设计。如图:


此时设计的model,仍然是Linear Model ,这是因为上图的公式可以写成这样,如下图;

画出每种神奇宝贝的测试结果,会发现Average Error均降低了。如下图:

也许其他的因素如:重量,生命值…也会影响神奇宝贝进化后的CP值,没关系把所有的因素统统加进来。如图:


这样会发现,Testing Error更加高了,所以有些无关的因素是需要排除的。现在介绍另外一种方法,我们可以修改Loss Function。如图:

本文标签: 机器学习笔记(二)