更新、更全的《機器學習》的更新網站,更有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\)個座標,沿着剩下的一個座標軸迭代,獲得函數的局部最小值;梯度降低法則是沿着梯度的負方向獲得函數的局部最小值。
- 座標軸降低法是一種非梯度優化算法,可是一個週期中循環使用不一樣的座標方向迭代,至關於梯度降低的一輪迭代。
- 因爲座標軸降低法是利用當前座標方向迭代,不須要求目標函數的倒數;梯度降低法是利用目標函數的偏導數來肯定迭代方向的。