斯坦福公开课——机器学习课程(一)

引言

明年这个时候就要找工作了,放弃了嵌入式的大坑,想着对人工智能比较感兴趣,就入了机器学习的坑,以此记录学习过程吧。先从这个网传的很厉害的公开课开始吧:斯坦福公开课——Machine Learning。
PS:部分图片来自课程Machine Learning


What

万事都从What起。

myself

自然都是从定义开始嘛。有两个定义:

Field of study that gives computers the ability to learn without being explicitly programmed.

Arthur Samuel
这个人他自己当时写了一个程序,来下一个西洋棋,他自己本身西洋棋很菜,但是他的程序通过不断地和他进行西洋棋对赛,他的程序渐渐学习到了那种布局是好的,可以赢得比赛的,于是最终程序牛逼大了,超过了他的水平。

A computer program is said to learn from experience E with respect to some task T and some performance measure P, if its performance on T, as measured by P, improves with experience F.

Tom Mitchell


监督学习和非监督学习

监督学习:给出一个算法,部分数据集已经有了正确的答案。(分类问题、回归问题就属于监督学习中的一种)

非监督学习:我们有数据集,可是并没有标签,也就是没有正确答案,我们需要自己找出规律。(聚类问题是非监督学习中的一种)


线性回归(Linear Regression)

x经过函数h映射到yh是一个线性函数,所以叫做线性回归。使用时,现将我们的训练集给线性回归模型训练,然后用训练出来的h来预测新的x对应的y


在最简单的线性回归中,h=a1+a2*x,其中a1, a2模型参数。然后我们有这样一个数据集(图中的叉)


代价函数


然后我们要做的就是调整a1, a2的值,来画出这样一条直线,尽可能的拟合这些数据点。


那用什么来作为评判拟合的好坏的标准呢?


我们要寻找一组确定的a1, a2,然后使真实值和预测值之差的平方除以两倍的训练集大小,这样的值可能的小。(这个值有点类似于方差)

正式的写法如下:


其中这个J就称为代价函数。代价函数不止这一种,但这一种是较为常用的一种。

假设a1=0,那么h=a2*x,我们只需要调整a2的值,来求最小的J。假设我们有三个点(1,1),(2,2),(3,3),那么随着a2的变化,我们可以画出J-a2的关系图。


可以看出,当a2=1的时候,J有最小值。

当只有一个模型参数的时候,你会得到一个类似于上图的弓形曲线,但是当模型参数是两个的时候,你就会得到类似于这样的弓形曲面:


图中x,y轴表示a1,a2,然后z轴表示J,在这样的弓形曲面里面,你总可以找到一点(m,n)使得J最小。将三维曲面化为二维的等高图:


这些圈圈表示,在这个圈上的点有着同样的J值。所以J最小的值,就是这些圆圈的中心点。

对于一维和二维的模型参数,还可以通过可视化来估计,但是更高维度的模型参数,无法通过可视化来人为估计,所以需要一种更好的计算方法,来寻找合适的模型参数。


梯度下降法(Gradient descent algorithm)

梯度下降法不仅被用在线性回归,很多地方都会用到梯度下降法。

使用梯度下降法,最直观的的就是,你有一个初始点,然后你在这个点附近找一个J值下降最快的方向前进一步,然后再循环往复,直到到达一个局部最低点。


但是你把初始点挪一下,你就会得到一组完全不同的模型参数,和另一个局部最小值J


这就是梯度下降的一个特点。正式一点的来写梯度下降:


这个里面的:=表示赋值,α表示学习率,也就是上面所说的,你每一步走多远。

在上式中,应该先计算各个模型参量的偏导和将要更新的值,全部计算完了之后,再将更新值赋值给模型参量。

即使学习率不变,也会到达局部最小值,因为越接近局部最小值,偏导项就会越小,然后实际跨出的一步就会越来越小。但是过小的学习率,会导致收敛过慢,但过大又会导致不收敛甚至发散。

对于线性回归模型,梯度下降法是这样的:


其中:


后记

事实证明,机器学习也是个大坑。加油吧,各位,前路漫漫。