讨论这个方法之前,先说些题外话。首先,我感觉机器学习是一门值得我们去了解和学习的一门技术,它不仅仅应用于我们的生活,而且不断地在改变着我们的方方面面。虽然很早就已经接触它,并开始学习,但是总体感觉是学习的比较混乱,仅以从今天开始的一系列文章作为重新总结和学习机器学习的一个新的历程。其次,学习机器学习,要有耐心,要执着,要不断总结和实现。最后,也是最重要的,要明白你的初衷是什么,也就是为什么要学习它。如果没有搞清楚为什么,那还是先弄清楚吧。好了,废话不多说了,开始进入正题。
一、引言
机器学习中的一个大类的问题就是分类问题。分类在我们的生活中也是很常见的,比如说,你刚进入大学,要分清哪些同学喜欢玩游戏,哪些喜欢学习,这样,你想玩游戏的时候可以找爱玩游戏的同学一起,你学习遇到难题可以找喜欢学习的同学请教。当然,你的好友可以同时做到以上两点那是最好不过的了。
还要提一下分类和回归的区别,当我们要解决的问题是预测的离散值的时候,也就是上面提到的例子,分清哪些人喜欢玩游戏,哪些人喜欢学习,这就是一个分类问题。当要预测的值是一个连续值的话,那这就是一个回归问题。比如,我们可能在刚上大学的时候,不了解同学们平时喜欢打游戏或者喜欢学习,但是我们知道他们一系列的其他信息:A同学周一到周五喜欢去图书馆、自修室,但是周末就和寝室的同学打游戏,甚至玩通宵,当然还有其他信息。那么,我们的问题是A同学喜欢学习的可能性有多大,这个问题的答案是[0,1]上的任意一个实数(这取决于你的预测模型),你可能根据你的系统推测出A喜欢学习的概率是0.51。
二、问题的提出
我们考虑简单的单一变量的线性回归。我这里为了简便就举《机器学习基础教程》上的例子。男子100m比赛赢得金牌不同举办年份所需的时间。如图1 所示:
通过上图,我们至少可以看到年份和获胜时间存在一个关系。我们要预测2016年男子100米金牌所需的时间。
三、模型假设
y表示所需时间,
我们现在知道2016年之前每届奥运会的男子100米金牌所需的时间,通过图一我们看到数据点的分布呈现一种趋势关系,假设它们分布在公式1所示的直线周围,我们的目标是找到一条直线,来拟合我们的观测数据,进而用我们找到的这条最佳的线预测2016年的男子100m金牌所需时间。那么,什么样的直线最好呢?我们如何求公式1中的 a,
假定我们的模型已经选择好了,那么衡量这个模型的一个常用方式就是用平方损失函数:
上述公式(2)最小,我们就说模型对我们现有的观测数据来说是最好的,我们暂且抛开数据过拟合的问题。那么问题转化为求 L(t,f(x;a,b))取得最小值时候的 a,b.令 n代表历史数据的数目,则我们的损失函数可以写为:
四、推导过程
用公式(3)分别对a,b求偏导数,然后令其分别等于0, 这就可以求得a,b. 这里用到了函数极值,可以参考高等数学。
利用公式4,5求解得:
把 a,b带入公式1,然后令 x=2016就可以求出所需时间,拟合直线的效果如图2所示:
这样,我们就可以进行预测了。当然,这里只是一个简单的事例,我们并没有考虑其他因素。最小二乘法是介绍完了。
五、总结
本文介绍了最小二乘法拟合数据的过程,最小二乘法是最优化方法中的一个,要了解更多优化方法,可以看看《最优化导论》。本文的事例只考虑了一个变量:年份,如果有多个自变量,它们在空间中也满足线性分布,能不能用最小二乘法去拟合数据呢?这个问题,我将在下一篇文章中进行介绍。