admin 管理员组文章数量: 1184232
李宏毅机器学习[1]
最近在B站上学习李宏毅的机器学习的课程(2020版),他讲了一个预测宝可梦CP值的例子让我对机器学习有了一个大概的了解,或者说是让我明白了机器学习是要干嘛。下面是我对这个例子的认识和理解。
目标:预测宝可梦的CP值,即Combat Power战斗力。
预测分为了三个步骤,寻找一个适合的Model,评判一个function的优劣程度,选择最优function(Gradient Descent梯度下降)。
步骤一:寻找一个合适的Model。
说简单一点,就是找一个function,输入一些值,得到一个输出结果,这个结果就可以看成预测的CP值。即f(input)=output,课程中假设这个function为f=b+wXi*,其中b和w可以是任意值,Xi为一只比比鸟当前的某一属性值,这个function得到的结果就是一只比比鸟进化之后的CP值。当function中包含比比鸟所有的属性值时,这些所有的function set就会构成linear Model y = b + ∑ w i x i y=b+\sum w_ix_i y=b+∑wixi,其中Wi为权重,b为偏量,Wi为属性值。
步骤二:评判一个function的优劣程度。
在上一步骤中找到了一个“合适”的function f=b+wXi*,但是由于b和w的取值时任意的,就会造成输出的CP值不同,因此b和w的取值决定了这个function的优劣程度。
评判一个function的优劣程度会用到损失函数Loss function,实则也是找一个合适的function,只不过这个function的输出是how bad it is。 课程中所用到损失函数为L(f)=L(w,b) = ∑ i = 1 n ( y ^ n − ( b + w ∗ x c p n \sum_{i=1}^{n} (\widehat{y}^n-(b+w*x^n_ {cp} ∑i=1n(y n−(b+w∗xcpn),其中 y ^ n \widehat{y}^n y n表示第n个pokeman进化之后的CP值, x c p n x^n_ {cp} xcpn表示第n个pokeman进化之前的CP值,该function得到的数值越小表示这个function越好。
步骤三:选择最优function。
即损失函数的输出值最小即为最优的function。
使用Gradient Descent梯度下降法求解最优值。
数学白痴的理解:在二维坐标轴上作出损失函数的图像,随机选取一个值 w 0 w^0 w0,求解损失函数L(w)在该点处的微分,即斜率。当斜率大于0时,左移,反之右移,移动规则如下:
如此反复操作,即可得到一个Local optimal局部最优解。
当含有两个参数时使用梯度下降法:
包含两个参数时使用梯度下降法求解最优值时的热力图如下:
求解到最优值之后的function运用在Training data上的结果如下:
可以看到b的相对最优值为-188.4,w的相对最优值为2.7,在这种情况下对Training data的预测还是较为完美的,10只pokeman的CP预测值平均出错率仅为3.19。但是将这种情况下的function运用到Testing data上时的平均出错率却是3.5。如下图所示:
由此可见这个function并不是一个最优的情况,因此需要一个更加复杂一点的function。
function中增加二次方项时,运用到Training data上的平均出错率为1.54,运用到Testing data上时的平均出错率为1.84,如下图所示:
function中增加三次方项时,运用到Training data上的平均出错率为1.53,运用到Testing data上时的平均出错率为1.81,如下图所示:
function中增加四次方项时,运用到Training data上的平均出错率为1.49,运用到Testing data上时的平均出错率为2.88,如下图所示:
可以看到增加四次方项时运用到Testing data上的平均出错率开始变得更糟糕,增加五次方项时的平均出错率甚至达到了23.1。
下图展示了不同的function在Training data和Testing data上的出错率:
在不断增加function复杂度时,在Training data上的出错率持续降低,但是在Testing data上的出错率在某一时刻又开始增加,这是为什么呢?这实际上这是一种overfitting过拟合现象,即一个复杂的model在Training data有好的结果但是在Testing data上不一定有好的结果。过拟合也可以理解为一个学生在平时的模拟考试中总是可以取得很好的成绩,但是在最后的期末考试中成绩不太理想。
此时还有一个问题,不同的function是不是适用于所有的pokeman?下图展示了不同的pokeman使用的不同的function之后的预测值分布:
下图为不同的pokeman对应的不同的function:
由此可见pokeman的不同也会影响function,将上图中的function整合为一个linear function如下图所示:
除了不同pokeman会影响function之外,pokeman的其他属性比如height,weight,hp值都会是影响function的一个因素。下图展示了加入这些因素之后的预测值分布图:
将其他因素整合到function中之后:
可以看到在新的function中,我们不仅增加了二次方项使得这个function相对复杂度增加了,而且还加入了其他因素比如weight、height以及hp值,此时可以得到一个非常理想的Training data上的平均错误率为1.9。那么使用如此复杂的一个function在Testing data上的平均错误复杂率是不是也非常理想呢?结果确是10.23,出现了overfitting现象。导致产生overfitting的原因可能是我们在function中增加的其他因素导致了这一现象,此处不去深究具体是哪些因素导致的。
我们再一次进行function优劣判断:对损失函数进行Regularization:
即在损失函数后面额外加一个项,λ值对损失函数L的影响如下:
可以看到随着λ增大,Training data上的平均错误率也在逐渐增大,但是当λ=100时在Testing data上的平均错误率达到了一个较为理想的值11.1。
以上就是在李宏毅机器学习中关于宝可梦CP值的预测全部内容,因为只是入门,还有很多地方没有去深究,只是逐步了解了机器学习是什么,是为了做什么。文中若有出错的地方,欢迎各位指正。
本文标签: 李宏毅机器学习1
版权声明:本文标题:李宏毅机器学习[1] 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.roclinux.cn/p/1698023582a283133.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论