文章目录
前言
为了引人课程,李老师先从最简单的回归入手,以一个二次元宝可梦的CP预测为例,讲解了机器学习的三部曲,这个三部曲的思想将贯穿整个课程的过程,各位要好好领悟。
公式输入请参考:在线Latex公式
常见的回归预测
1.股票预测
2.自动驾驶
3.推荐系统
这里注意两点:
1.输入和输出是什么
2.什么是回归regression、什么是分类(答案在这里)
宝可梦实例
问题描述
Estimating the Combat Power (CP) of a pokemon after evolution.
预测宝可梦进化后的CP值
第一步 选模型
这里选用的是线性模型(因为这个玩意简单),找一个最好的线性关系(线性关系有无穷多个,我们只选一个,使用training data去选)去做预测。
这里要注意机器学习中的标识(字母、上下标)。
第二步 判断模型的好坏
由于上一步中提到线性(函数的参数不一样)关系有无穷多个,因此我们要确立一个判断标准,看某个线性关系的好坏。
线性模型中的函数:
函数的输入输出:
以上是一些真实的训练数据。假设我们有十只宝可梦的数据,图中展示的就是十只宝可梦进化后的CP值,横坐标为进化前的CP值
损失函数L
Loss function 𝐿的定义:Input: a function, output: how bad it is
输入就是函数,输出就是这个函数多不好,也就是衡量W,b的好坏。loss function可以自己定义,这里用的是类似预测值和真实值的距离来表示(后面还会有了很多其他衡量方法,例如:交叉熵、KL散度之类的)。
可视化一下
说明:Each point in the figure is a function.The color represents L(𝑤, 𝑏).
第三步 最优结果Best Function
目标:
用梯度下降来求:
在这个过程,你可能找到的只是一个local optimal就是局部最小值,而不是全局最小值。但是在线性回归中,不会存在局部最小值,因为线性回归函数是凸函数。
…… Many iteration
对于两个参数:
可视化:
梯度下降容易碰到的问题
梯度下降的推倒
推倒这块其实李航老师的书比较细,其实就是求偏导数。要用到链式法则
关于梯度下降为什么一定会得到最优解(为什么会收敛),请看这里
结果分析
以上是训练数据上的拟合结果,而我们主要关心测试数据:
为了降低错误率,采用更加复杂的模型:
训练、测试数据的拟合结果
貌似越复杂的模型越好,再复杂一点(三次方):
四次方结果越来越差了:
五次方出现了明显的过拟合,而且出现了负的CP值,明显不合理
模型复杂度分析
所以目前为止,我们试了五个不同的model。可以发现,在训练集中,随着模型的复杂度的提升,误差在减小。为什么会这样呢?因为我们模型越复杂,就可以把简单的模型考虑的东西包含在里面。可以看图中的同心圆,越复杂的模型包含的越多(面积越大)。
A more complex model does not always lead to better performance on testing data. This is Overfitting.
多变量的宝可梦实例
上面的例子只考虑了宝可梦的一个属性CP。其实宝可梦还有很多属性:宝可梦类型、生命值、防御值等。
现在我们试试用更多(60个)宝可梦的数据来试试。可以发现60个数据并不能用简单的关系来描述。数据比较散乱,可能是由于物种关系造成的,我们先对数据进行分类。所以之前只考虑CP值是不对的,我们这里再把物种考虑进去。
再跟进三个步骤走一次,这里仍然采用线性模型来进行预测(拟合)。
步骤一 Redesign the Model
x
s
x_s
xs = species of x
写成数学表达式:
叼儿塔函数类似冲击函数,例如:
此时,整个函数变成:
训练结果(这里黄色的Weedle和绿色的caterpie重合了。):
如果二次项的模型直接过拟合:
因此我们要调整模型:
步骤二 加入正则项
关于L1、L2正则的解释看这里
老师的灵魂拷问:为什么不用对b(bias)进行正则?
答:因为b不会影响函数的输出,只会使得函数上下平移。
由于正则项中
λ
\lambda
λ是超参数,所以是人为可以设置的。因此,我们设置多少合适?
要大小合适,还好这个玩意可以靠经验,也可以考实验。