相关术语
监督学习(supervised learning):数据集存在“正确答案”,算法目的是给出更多“正确答案”
无监督学习(unsupervised learning):也叫聚类算法,数据集不存在“正确答案”,算法目的是将现有数据集进行分类并判断新的数据属于哪一类
回归(regression):预测值是连续出现的(例如房价)
分类(classification):预测值是离散的(0或1或存在更多分类)
单变量线性回归
利用直线对数据进行拟合,借此来预测新的输出值
代价函数(cost function)
代价函数是数据集中的值与假设函数(hypothesis)的预测值的差的平方和。我们用这个参数来表示假设函数对原数据集的拟合程度,代价函数约低表示拟合程度越好
对于一个参数的情况,如果我们将代价函数随参数的变化画出来,那么将是一条线,如果参数变为两个,那么代价函数是一个面。对于线性回归的情况,我们可以证明代价函数是凸函数,即只有一个极值点,也是最小值点。这个最小值代表的是对数据集拟合最好的假设函数
梯度下降(gradient descent)
当我们有了代价函数之后,如何寻找到这个最小值点呢,一种方法就是梯度下降。梯度下降就是不断改变参数,增量为方向导数的反方向,之后不断迭代直到算法收敛
我们从直观上来看就是代价函数不断从大的值向低的值衍进。需要注意的是学习速率α值必须合适,太小会导致算法收敛缓慢,太大会导致算法收敛失败,甚至发散
正是由于代价函数的梯度随着趋向于极值点会越来越小,参数值的改变量也随着趋向于极值点越来越小。当改变量小于某个值时我们也就判断算法收敛了
当我们将梯度下降算法应用到线性回归上时可以得到如下结果
多变量线性回归
当因变量与多个自变量相关时,我们称其为多变量线性回归
我们也可以把假设函数写成矩阵形式
我们也可以对多变量的情况应用梯度下降法
特征缩放
在多变量的情况下我们需要让不同的变量处在相似的规模上,否则可能会使得算法收敛缓慢
学习速率
我们之前说到学习速率α太大太小都不合适,那我们应该如何选择学习速率的值呢?最好的方法就是将代价函数随迭代次数的变化画出来,不断调整学习速率的值来找到一个较快的收敛方案。一个很好的调整方案是从最小的学习速率开始不断将其乘3,例如..->0.001->0.003->0.01->0.03->0.1->0.3->1->..
多项式回归
很多时候我们用线性回归无法很好的拟合数据,这时候多项式回归提供给我们更多的选择。我们可以采用更高次幂的项来使直线变为曲线。对于多项式回归的分析与线性回归差不多,我们只需要将高次幂项看做一个新的变量,然后将其看做多变量线性回归就可以了
正规方程(normal equation)
除了我们之前讲的梯度下降法,我们还可以用正规方程来求代价函数的最小值,方法就是另代价函数的全部偏导数等于0,求出的θ的值就是我们所需的值
我们可以从代数的角度证明,当θ(θ是一个向量)等于下面这个式子时,代价函数取得最小值
我们可以将梯度下降法与正规方程法做一个对比可以知道当变量比较多时梯度下降也有很好的性能,而正规方程法更适用于边聊较少的情况
不可逆情况
我们注意到求θ的时候有个求逆矩阵的操作,那么当矩阵不可逆的时候应该怎么办呢?矩阵不可逆主要由一下两种原因导致,一是变量之间存在冗余,二是特征的数量比数据集的训练例数量还多。当然不可逆情况出现的可能很小,就算存在,我们也可以通过matlab中pinv函数求矩阵的伪逆来得到正确的结果。至于伪逆是什么,以及为什么采取伪逆也能得到正确结果就不在这介绍了