本篇博客内容均为个人理解,如有错误,敬请指出。
1.1 Welcome to ML
列举了一些机器学习常见的应用,如:
1.手写识别
2.垃圾邮件分类
3.图像处理
4.搜索引擎
......
据我看来,模式识别,统计学习,数据挖掘,计算机视觉,语音识别,自然语言处理等领域都与机器学习有很深的关联。
1.2机器学习的定义
据我到目前个人的理解来看,机器学习就是依靠目前强大的硬件来利用大量的测量数据或者历史数据训练模型,使其具有预测,判断,识别的功能。
这个训练模型的过程,即是机器的学习过程。
简单地拿我以前看见过的一个例子来说,机器的学习过程中的一种,就是对各种参数的调整。比如,要求你训练出一个识别蘑菇是否有毒的模型。那么,你需要一定数量的毒蘑菇和无毒蘑菇的照片。通过设定几个参数,如颜色,形状,生长环境..为x1,x2,x3...再设计一个方程,y=a1x1+a2x2+a3x3...给a1,a2,a3...赋初值。通过计算y的值来判断是否是毒蘑菇。对一张照片判断之后,再与其真实值对比,如果识别错误就要调整参数。通俗地来说,比如颜色的参数为0.4,形状的参数为0.3,生长环境的参数为0.3,那么就是说,我判断这个蘑菇是否是毒蘑菇的依据就是百分之四十是看颜色,百分之三十是看形状,百分之三十是看生长环境。通过每次识别的正确与否来调整参数,即调整的是这三种因素所占的比例,亦或者说是重要性。比如颜色的参数为0.9,形状为0.05,生长环境为0.05,那么基本上只要看颜色就能有百分之90的把握判断出是否是毒蘑菇。
直接地来说,识别毒蘑菇的问题,就是一个分类问题。方程y即是决策界限。通过比对识别结果的正确与否来调整参数,这个学习类型即是监督学习。因为所用的训练集是提前打好标签(即是否是毒蘑菇)的。
1.3机器学习的分类
主要有两种类型:监督学习,无监督学习。两者的区别在于是否需要人工参与数据标注。即是否需要对训练集处理,打标签。
1.3.1 监督学习(Supervised Learning)
所谓监督学习,即是预先对数据集进行处理,人工标注,给出其对应的结果。再用这些处理好的数据集训练模型,最后用模型来进行预测或分类。
监督学习一般分两种情况:回归问题,分类问题。
回归问题针对的是连续值,如预测股价变动曲线,房价变动曲线...
分类问题针对的则是离散值,要判断一个东西“是” 还是 “不是”,即判断其对应的值是“1”还是“0”。
1.3.2 无监督学习(Unsupervised Learning)
和监督学习相比,无监督学习不需要人工标注数据集,不需要给出数据对应的结果。而是由计算机通过算法自行分析得出结果。计算机会将数据集归为几个不同的簇,即为聚类算法。
无监督学习可以分为:聚类,非聚类。
视频里提到了一个非聚类问题:鸡尾酒问题。
2.1 单变量线性回归
该方程只有一个自变量x,即单变量线性回归的模型。有两个参数分别是theta0和theta1。
视频中举了预测房价的例子。其实就是用我们初中学的一元一次函数来拟合数据集,达到预测房价的目标。
除了这种直线型的一元一次函数之外,我们还可以用指数模型,对数模型等等线性模型,以及非线性模型,来拟合训练集的数据分布,找到最优的拟合效果。
2.2 代价函数(Cost Function)
所谓代价函数,即损失函数。它是用来表示训练的模型预测出的结果与真实值的差距。代价函数越小越好。
提出代价函数,我觉得目的在于更直观地表示出预测结果的可靠程度,以及作为使用诸如梯度下降等方法的工具。梯度下降之后有没有效果,就可以看代价函数有没有降低。当预测值与真实值相等,代价函数等于0。
下面给出代价函数的公式:
从这个公式可以看出,代价函数是利用我们科学计算里学到的最小二乘法提出的。在梯度下降的过程中,我们就是通过一次一次不断下降找到代价函数的最小值或局部最小值。
2.3 梯度下降算法(Gradient Descent)
如果说代价函数是用来表示预测值与真实值的误差的,那么梯度下降算法就是用来找出代价函数的最小值。而其找代价函数的最小值,就是通过梯度下降的方法。下面给出公式。
在公式中,阿尔法表示学习率,j表示第j个参数。这里我们依旧是按照单元线性回归的模型进行梯度下降,因此参数为单元+1,即为2。
这个公式熟悉微积分的话理解起来也就不难。具体解释视频里讲的很清楚。梯度下降就好像下山,越下越低最后到一个最低点。但问题是,这个最低点是局部最小值还是全局最小值,貌似还没有一个明确的判断依据。
另外很重要的一个参数就是学习率。学习率就是每一次学习之后,或者说每一次训练之后,参数变化的幅度。从下山的那个例子看,也就相当于你每次下山所迈的步子大小。这个值,不能太大,也不易太小。太大容易出现跨过最小值的情况。太小则导致训练次数太多。
视频中提到了一种可以判断是否因为学习率太大导致跨过最小值的情况,即梯度下降后,无法收敛。
需要注意的是,每次梯度下降时的方向与大小都是由偏导计算出来的,而学习率的作用就是在偏导值计算出来之后对其进行控制。如偏导值计算为2,学习率为0.05,则下山的步子为0.1。这是一个很显而易见的道理。
另外,学习率只需选定,不需要中间调整。因为在梯度下降的过程中,斜率也会变得越来越小,代价函数的变化幅度也会越来越小,直至收敛。
2.4 线性回归的梯度下降
将线性回归模型的代价函数公式代入梯度下降算法中即可。
另外,由于线性回归函数呈现碗状,因此只有一个全局的最优值,所以函数一定总会收敛到全局最小值。而函数 J 被称为凸二次函数,而线性回归函数求解最小值问题属于凸函数优化问题。详情见下图。
另外要注意的是,我们这里的梯度下降都是批处理,即一次处理i=1到i=m的样本数据。
最后注意一个细节,就是在每次更新参数theta0和theta1的时候,要注意是同步更新。
即先算出temp0,再算temp1,然后才能用temp0更新theta0。切记不可算出temp0之后直接更新theta0,那会导致计算temp1时,theta0已经发生了变化。
3.线性代数回顾
线代矩阵的一些基础知识,略。
4.安装matlab
略
5. 1 多变量线性回归
多变量线性回归,顾名思义,就是变量不再是一个,而是多个。其代价函数,梯度下降方法其实变化都不大。
此时方程写为:hθ(x)=θ0+θ1x1+θ2x2+⋯+θnxn
可以认为theta0*x0=theta0,即x0=1;
那么hθ(x)=θ0x0+θ1x1+θ2x2+⋯+θnxn
可以写作hθ(x)=θTx。如此就将函数向量化了。为什么要向量化呢?因为便于表达,也利于并行计算啊。
5.2 代价函数与多元梯度下降法
代价函数和梯度下降其实都没有变。代价函数公式:
梯度下降公式求偏导:
学习率的选择指标不变。
5.3 特征缩放(Feature Scaling)
相比单变量而言,多变量线性回归的梯度下降,有时就会遇到一个问题就是变量之间的差距过大。这时就会出现以下情况:
面对这样的代价函数,如果进行梯度下降,J可能会向图中一样进行很多次左右移动,造成迭代次数过多,浪费时间资源。因此我们进行特征缩放,使各参数处在相近的数量级之后再进行梯度下降。我们应尽量使代价函数的图像如下图所示:
5.4 均值归一化
均值归一化与特征缩放解决的是同一个问题,即参数之间数量级差距过大。只是方法不同。
均值归一化是将各个参数标准化,不是对个别参数进行处理。
这类似我们概率论里学到的标准化。
5.5多项式回归
有时候,线性函数无法满足我们拟合数据集分布的要求。这时我们可以采用多项式的形式。也就是2次,3次,多次函数。
那么,单变量多项式如下:
对于单变量多项式,我们可以令:x1=x,x2=x方,x3=x的三次方。这样可以将多项式化为多变量线性回归。即:
5.6正规方程
正规方程给了我们一种找代价函数最小值的另一种选择。他的依据是对代价函数进行求导,令导数等于0,这时的theta就是要找的代价函数最小值时的参数。得出公式:
注意:对于一个矩阵来说它的逆不一定存在。那么可能存在XT *X的逆不存在,但是这种情况是极少的
若(XTX)不可逆,则需要考虑以下两个方面:
① 存在多余的特征,即有的特征变量之间是线性相关的。
这时应该删除一些特征变量直至特征变量之间没有互相线性相关的特征存在。
② 特征变量太多
这时也可以删除一些特征变量,或者采用正则化的方法。
5.7正规方程与梯度下降的比较
各方优劣图上已经很清楚了。需要注意的是当n特别大时应选用梯度下降,当n比较小时,小于10的四次方的数量级时,可以选择正规方程求解。
当然从我个人的角度来看我还是喜欢梯度下降,虽然有时候比较缓慢,但是效果稳定可靠,而且不受n的大小影响。
6.Octave教程
暂略。