本文将涉及以下知识点
(1)特征缩放
(2)均值归一化
(3)正规方程
优化梯度下降算法
在上一篇博文中,我们了解了梯度下降算法,它为解决线性回归问题提供了思路。但梯度下降的迭代推算过程,较为耗时。简单地说,整个算法是一个不断尝试收敛的过程。如果能够降低算法的尝试次数,以及每次迭代的算法复杂度,那么,便能更高效的解决线性回归问题。
影响梯度下降算法收敛速度的因素很多,例如样本集合大小,特种向量中某一元素的取值范围远大于其它元素,学习速率等。
样本集合越大,算法推算出的假设函数越精确。因此,不能通过减少样本来提高算法的运算速度,这将付出降低精确度的代价。
所以,只能在其它干扰因素上找突破口。
特征缩放
还以房价预估为例,假设特征向量由面积,楼层,房龄,房间数量组成。取值范围依次为,面积:30~200,楼层:1~35层,房龄:1~70年,房间数量:1~6间。由于面积的取值范围较其三者都大,因此,在相同学习速率下,对面积做偏导数的次数远高于其它三者。同样的问题,对于楼层和房龄也存在。
为了使得迭代次数(求偏导数的次数)更加均衡,提出了特征缩放(feature scaling)的概念。即,用替代原有。
在特征缩放的过程中,为了让特征的取值范围更加规范化,即规定在-0.5~0.5内,进而提出了均值归一化(mean normalization)的概念,即用替代。
学习率
在代价函数中,学习率也是一个重要的参数。学习率的大小,影响迭代幅度。学习率偏小时,迭代次数多。学习率偏大时,迭代次数少,但有可能造成不收敛的情况。那么如何选择一个合适的学习率呢?其实,也是通过多次尝试获取最佳学习率。
通常,我们选定一个学习率后,会画出代价函数与迭代次数n的关系图。一个较为合适的学习率,对应的代价函数与迭代次数的关系图应该是收敛的。如下图。
若所画关系图未出现收敛,则说明学习率偏大。可以在保证收敛的前提下,尽量提升学习率,以减少迭代次数。
综上,虽然可以通过运用特征缩放和调节学习率的方式,提高梯度下降方法的收敛速度。但梯度下降方法还是摆脱不了“迭代”、“尝试”的口实。那么有没有方法,可以一次性得到代价函数的最小值呢?
正规方程法
我们还是以房价预估为例。默认为1,分别代表楼层,房龄,房间数量。房价为y,且假设房价与特征向量间存在线性关系,。
若,样本集合大小为m,则
设,,,
则,
此时,为方阵,存在逆矩阵(注:也可能不存在,但MATLAB或OCTAVE会算出伪逆矩阵,因此,此处暂时认为,方阵都存在逆矩阵)。
因此,
,其中E为单位矩阵
因此,。
有了这个推算结果,我们可以在MATLAB或OCTAVE中调用算法,得出相应的A。
对比与选择
与梯度下降算法相比,正规方程法不需要选择学习率,不需要迭代,更不需要画代价函数与迭代次数n的关系图,证明学习率对于收敛的影响。这使得正规方程法似乎有着压倒性的优势。但正规方程法,也存在缺陷。
当特征向量中的特征数量较大时(即X的列数n较大时),正规方程的时间复杂度为,因此,会非常耗时,速度不一定比梯度下降快。那么n多大算大呢?推荐值为10000,但仁者见仁,还得看硬件性能。