机器学习的定义
机器学习被下过两个定义:
1、使计算机能够在不被明确编程的情况下学习的研究领域
2、如果一个计算机程序从经验E(Experience)中学习关于任务T(Tasks)的某些类别和性能度量P(Performance),让其在任务T中的性能(由P测量的)随着经验E而改善,那么这就是机器学习
目前机器学习的主流分为监督学习、无监督学习、强化学习三类。
监督学习
在监督学习中,我们给定了数据集并且已经知道了他们所对应的正确结果,认为输入和输出之间存在某种联系。
监督学习分为“回归(Regression)”和“分类(Classification)”问题。在回归问题中我们尝试在连续的输出值中预测结果,在分类问题中则强调预测的结果是散列值。
无监督学习(Unsupervised Learning)
无监督学习能让我们在知道很少或根本不知道结果应该是什么样子的情况下处理问题,通过基于数据中变量之间的关系对数据进行聚类来导出他们间结构。无监督学习不会对结果进行预测。
强化学习(Reinforcement Learning)
强化学习强调的是对场景的变换进行实时的学习和决断。其通过不断尝试,从错误中学习,最后找到规律。强化学习的核心思想就是通过对每次决策进行打分来让程序尽量做出得分较高的选择,避免得到低分的情况。比如非常有名的Alpha Go就是强化学习的实例。
了解完机器学习的概念及分类后二话不说,开始正面刚回归问题。
回归问题的核心思想是让程序从原有数据中学习经验,然后对新数据进行结果预测。在机器学习中,用来训练模型的数据集称作训练数据集,用来对模型准确进行率评估的数据集称作测试数据集。在回归问题中,训练集和测试集都必须包含观测值和标签两类数据。回归算法解决问题的方式就是把训练集数据喂给机器学习算法,算法会根据这些数据拟合出模型,经过测试集数据的评估和反复调优后,就可以拿着合格的模型对新的数据结果进行预测了。
一元线性回归
咱们从最简单的情况开始学。这里有个一元线性回归的例子进行可以辅助我们了解回归问题:为了对某个房屋的价格进行估算,我们可以获取一些其他房源的信息和价格,根据这些经验来预测当前房屋的价格。为了简化问题,我们仅利用房屋面积x这一个特征,这样一来我们假设的房屋价格hθ就满足函数 hθ(x) = θ0 + θ1x,此时我们的目的就是尽量求出或找到最接近真实情况的θ0和θ1的值,这样才能最精确的评估出房屋的价格。在m条训练数据中,第 i (1 <= i <= m)条数据的预测结果为hθ(xi),对应的真实结果为yi,预测结果和真实结果之间的差异用均方差表示就是这时问题的求解思路就转变成了求上述公式在取得最小值时所对应的θ0和θ1。这个公式就是代价函数(Cost Function),通常为了后期运算的方便会在前面乘以1/2,代价函数用J表示。
在这个问题中,如果假设θ0的值为0,即 hθ(xi) = θ1*xi,那么此时的代价函数J(θ)在平面坐标系上是一个开口朝上的二次函数曲线,曲线最低点处的横坐标取值就是最佳的θ1的取值。
不过当θ0取值不为0时,即hθ(x)是一个包含两个系数的函数时,代价函数J(θ0,θ1)的形状就变成了如下的样子
此时图形最低点处θ0、θ1的值就成了J(θ0,θ1)最小的情况。以此类推,当假设函数不在是一次函数,而是更复杂的函数形式时,代价函数的图像会变得越来越复杂。那个时候代价函数的图像就变成了高低起伏的丘陵图,函数的求解也变成了利用梯度下降法求局部(或全局)最低点。
梯度下降算法(Gradient Descent Algorithm)
当假设函数hθ(x)为形式更复杂的函数时,代价函数的图像就变成了如下形式看完了图解,接下来就要开始分析公式和计算原理了。
α是什么
在式子中α表示的是学习速率,也就是下山时每次迈出的步长。这个参数需要我们手动设定,如果设置的过大会导致函数在局部最低点附近震荡不收敛,从而无法取得最小值,如果设置的过小会导致收敛速度过慢。
α后面那一坨又是什么
公式的
为什么使用减号
使用减号是因为当选取的初始点在 极小值点的右半坡时(从j轴所在方向上看),点所在的切线斜率为正,使用减号可以让θj向左移动,从而接近极小值点。如果初始点在左半坡上,斜率则为负数,此时使用减号会让θj向右移动。如果初始点已经在局部最小值处了,那么偏导数(即当前点的切线斜率)为0,初始点会保持在最小值处不移动。另外由于移动过程中点的切线斜率会越来越小,所以导致坐标点越接近局部最小值时,迈出的步长就越小,减小的速率越慢。图解如下:
如果对θ0和θ1的公式继续进行计算,α后面的部分最终可以简化成下面这样
每次计算得到新的θ0和θ1的值都会比上一次更加接近局部最低点。对于当前这种单特征问题,只存在一个极小值点(也是全局最低点),当经过足够的迭代次数后就能找到最合适的θ0和θ1的取值。
多元线性回归
单一特征的值预测问题想必大家已经明白了,但是在许多问题中样本的特征往往不止一个,结果的预测也变得更加复杂。
特征缩放
为了避免后面的计算掉进坑里,这里插入介绍一下特征缩放的概念。
在多元回归问题中如果多个特征之间的定义域差距过大,则会导致损失函数图像被过度拉伸变形,此时如果直接利用梯度下降算法会导致收敛速度过慢。特征缩放就是将每一维特征的值域进行统一处理,让数据都落在近似的区间定义域中,如此一来损失函数图像会接近圆形,收敛速率也会得到提高。
在房价预测问题中令x1代表房屋面积,x2代表层数,如果不对这两个特征进行特征缩放,损失函数的图像会变成如下的细长状,函数也会来回震荡收敛的更慢
-----------回到主线任务上。------------
多元线性方程意味着公式中会存在更多项,像之前那样对每一维特征求偏导已经变得不现实,使用矩阵将会是个很好的办法。除了用梯度下降法拟合θ的最佳取值外,还可以使用正规方程的解法直接计算J(θ)等于0时的值那么除了正规方程解法之外,多元线性回归的梯度下降解法又有什么需要注意的呢?没错,面对大量的特征和数据,类似于单特征的线性回归的逐个求解的方式已经不适用了,取而代之的是使用矩阵进行求解。我们针对下图进行讲解
仔细看左上角的三行公式就可以发现,θ0、θ1、θ2可以直接用向量θ表示,后面红框中的内容如果也统一成向量δ的话整个θj的推导公式就可以变成(2)公式,其中向量δ的内容就是(3)公式。而且向量δ中的每个元素都是一个m行一列的向量,所以向量δ的结果是一个m*n维的向量。最终的计算公式是:
temp = θ - α*(X'*(X*θ-y))/m
θ = temp
这里除了α和m,其余都是向量,θ是特征向量(n*1维)、X是不含结果的训练集(m*n维)、y是只含结果的训练集(m*1维)、α是学习速率、m是训练集的条数。我们可以在一个自己指定迭代次数的for循环中对θ向量进行迭代,不过注意要用上面的写法避免值的混淆使用,同时还需要不断调整α值来找到合适的学习率(可以通过绘制J(θ)下降曲线来辅助判断)。逻辑思维能力强的同学可以自行推导。