引言
明年这个时候就要找工作了,放弃了嵌入式的大坑,想着对人工智能比较感兴趣,就入了机器学习的坑,以此记录学习过程吧。先从这个网传的很厉害的公开课开始吧:斯坦福公开课——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
映射到y
。h
是一个线性函数,所以叫做线性回归。使用时,现将我们的训练集给线性回归模型训练,然后用训练出来的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
。
这就是梯度下降的一个特点。正式一点的来写梯度下降:
这个里面的:=
表示赋值,α
表示学习率,也就是上面所说的,你每一步走多远。
在上式中,应该先计算各个模型参量的偏导和将要更新的值,全部计算完了之后,再将更新值赋值给模型参量。
即使学习率不变,也会到达局部最小值,因为越接近局部最小值,偏导项就会越小,然后实际跨出的一步就会越来越小。但是过小的学习率,会导致收敛过慢,但过大又会导致不收敛甚至发散。
对于线性回归模型,梯度下降法是这样的:
其中:
后记
事实证明,机器学习也是个大坑。加油吧,各位,前路漫漫。