根据之前的理论,机器学习就是在找合适的函数公式。例如:
· 股票预测问题:输入-过去十年某股票的价格,输出-明天该股票的价格
· 无人驾驶问题:输入-传感器收集的各种信息,输出-方向盘的角度
· 推荐系统问题:输入-用户已经购买的商品,输出-购买该商品的可能性
1. 案例问题
案例背景:预测进化后精灵宝可梦的CP(combat power)值,如果可以预测到该宝可梦进化后的cp值,就可以选择是否进化它。

2. 回归建模过程:
step 1: Model
机器学习的第一步,就是找到一组我们想要的函数表达式的组合,由前的分析可知,我们这里选择的是一组线性表达式。

在上式中,X代表的是输入的自变量,比如宝可梦的身高、体重等等,我们叫特征(feature);w是权重(weight),b代表偏差(bias)也就是截距项。
step 2: Goodness of Function
因为是有监督的学习,所以要收集训练集。
在收集好训练集后,我们需要定义另外一个函数——损失函数(Loss Function),这个函数的作用是告诉我们,我们目前所选择的模型等到的预测值,与其所对应的真实值的偏差是多少,然后从中找出对应的损失函数值最小的,函数表达式,通过这个过程,我们可以从之前的一组表达式中,找到我们想要的准确的最高的表达式。

step 3: Best Function
通过之前的过程,我们已经确定了最小的损失函数,所对应的参数w、b的值

通过之前的分析,我们已经知道了如何找到想要表达式的思路,但是如果通过穷举法来找到W、b效率太低,当计算量过大时就很不现实。由于我们已经得到了如上的表达式,就可以考虑如何用数学工具来求解,这里就使用了一个很有用的算法——梯度下降(Gradient Descent)。

梯度下降的具体操作:先随机选取一个点w0,然后在改点求L的微分,如果小于0就向右移动,大于0则向左,直到微分值为0,这样会找到一个局部最优解。在这个过程中由两个问题:
· 每次迭代,具体移动多远的距离呢?这取决于学习率(learning rate),也就是上式中的η值,具体取多少,在下节中会介绍。
· 由于随机选取的w0,所以找到的局部最优解,不一定是全局最优解,但是该问题在线性问题中不存在,由于为线性函数,所以只有一个最优解。

那由于在本次案例中,由连个参数,所以我们需要同时考虑w和b,其实就是一元到多元的推广,在这里也介绍了“梯度”的具体含义:所求参数值的偏微分。

将求出的参数值带入表达式,并输入测试集数据进行验证,发现损失函数为35,如何优化我们的函数呢?根据散点图,考虑引入一个二次项。

加入二次项后,我们继续用梯度下降进行求解,发现误差值明显变小了,那如果加入三次项会不会更精确呢?结果显示有变化了一点。

我们继续考虑加入四次项:

加入四次项后,在训练集的效果更好了,我们的模型更的拟合了训练集,但是在测试集的表现缺变差了,那这种情况就叫做过拟合这里就涉及到模型的泛化能力,也说明不是一味的准确训练集的准确率。所以应该如何选择合适的模型呢?
step 4: Redesign the Model
由于不同的宝可梦,进化的CP值有着显著的差异,所以我们考虑加入一个示性函数,对不同的宝可梦建立不同的方程。

但是这里只考虑了过去的cp值这一个特征,根据之前的研究,我们还可以加入其他的自变量

如上,是一个很复杂的模型,既考虑了不同的物种,也考虑了不同的特征,但是很现在这个模型过拟合了。
step 5: Regularization
如何解决过拟合问题呢,需要加入一个正则项,来约束加入的参数项。

在之前的损失函数的基础上,加入一个正则项,会使得误差变小的同时,模型不会过于复杂从而导致过拟合的情况。加入正则项也会是的函数更为平滑,平滑的函数对于异常值,不会过于敏感从而出现过拟合。

这里我们选择不同的λ的值,来看在训练集和测试集的误差变化,发现我们需要使得模型平滑,以防过拟合,但是过于平滑的函数也会使得误差变大。
总结:
建立线性模型后,需要用梯度下降来找到最优解的参数值(b、w)
在确定模型的时候,需要做到准确度和复杂度的平衡,越复杂的模型可能会在训练集上有很好的拟合,但是会出现过拟合的情况,而导致在测试集误差很大,所以加入正则项来使得函数变得平滑,所以最后函数需要多平滑,也就是λ的值,就是我们需要不断调整的参数。

网友评论