更新、更全的《机器学习》的更新网站,更有python、go、数据结构与算法、爬虫、人工智能教学等着你:http://www.javashuo.com/article/p-vozphyqp-cm.htmlpython
坐标轴降低法
坐标轴降低法顾名思义,沿着坐标轴降低。坐标轴降低法和梯度降低法使用的都是迭代法,即便用启发式的方式一步一步迭代求解函数的最小值。算法
能够想象一个可微的凸函数\(J(\omega)\),其中\(\omega\)是一个\(n*1\)维的向量。若是在这\(n\)维空间中存在着某一点\(\overline{\omega}\)可以使得\(J(\omega)\)在每个坐标轴上都是最小的,那么咱们则能够说\(J(\overline{\omega})\)是全局最小值。如二维空间\((x,y)\)中的曲线\(x^2\),当\(x\)和\(y\)都是最小的时候,即为曲线\(x^2\)最小值的时候。(注:Lasso回归的目标函数虽然不可微,可是因为目标函数非正则项是可微的,L1正则项是凸函数,所以也可使用该结论。)数据结构
1、坐标轴降低法流程
坐标轴降低法即在\(\omega\)的每一个坐标轴上作迭代降低,当每一个坐标轴上的值都收敛时,则能够说明达到了\(J(\omega)\)的全局最小值。机器学习
- \(\omega\)取初值记为\(\omega^{(0)}\),其中\((0)\)表示迭代的轮数,初轮数为0。
- 对于第\(k\)轮的迭代,依次求解\({\omega_i}^{(k)} \quad(i=1,2,\cdots,n)\),即
\[ {\omega_i}^{(k)} \in \underbrace{argmin}_{\omega_i}\,J({\omega_1}^{(k)},{\omega_2}^{(k)},\cdots,{\omega_n}^{(k)}) \]
其中因为在每次单独对一个坐标轴迭代的时候其余坐标轴上的值为常数。也就是\({\omega_i}^{(k)}\)是使\(J({\omega_1}^{(k)},{\omega_i-1}^{(k)},{\omega_i+1}^{(k)},\cdots,{\omega_n}^{(k)})\)为最小的值,除了\({\omega_i}^{(k)}\)为变量外,其余参数都为常数,则对\(J({\omega_1}^{(k)},{\omega_i-1}^{(k)},{\omega_i+1}^{(k)},\cdots,{\omega_n}^{(k)})\)求导便可得该函数的最小值。
- 检查\({\omega}^{(k)}\)和\({\omega}^{(k-1)}\)在每一个维度上的变化状况,若是全部维度的变换都小于某个阈值,则\({\omega}^{(k)}\)为最终结果,不然循环第2步,进入\(k+1\)次迭代。
2、坐标轴降低法和梯度降低法的异同
- 二者都是迭代方法,而且每一轮迭代都须要\(O(mn)\)的计算量,其中\(m\)为样本数,\(n\)为特征数。
- 坐标轴降低法固定\(n-1\)个坐标,沿着剩下的一个坐标轴迭代,获得函数的局部最小值;梯度降低法则是沿着梯度的负方向获得函数的局部最小值。
- 坐标轴降低法是一种非梯度优化算法,可是一个周期中循环使用不一样的坐标方向迭代,至关于梯度降低的一轮迭代。
- 因为坐标轴降低法是利用当前坐标方向迭代,不须要求目标函数的倒数;梯度降低法是利用目标函数的偏导数来肯定迭代方向的。