更新、更全的《機器學習》的更新網站,更有python、go、數據結構與算法、爬蟲、人工智能教學等着你:http://www.javashuo.com/article/p-vozphyqp-cm.htmlpython
最小角迴歸至關於前向選擇法和前向梯度法的一個折中算法,簡化了前項梯度法因\(\epsilon\)的迭代過程,並在必定程度的保證了前向梯度法的精準度。算法
一般用最小角迴歸法解決線性模型的迴歸係數。對於一個有\(m\)個樣本,每一個樣本有\(n\)個特徵的訓練集而言,假設能夠擬合一個線性模型\(Y=\omega^TX\),其中\(Y\)是\(m*1\)的向量,\(X\)是\(m*n\)的矩陣,\(\omega\)是\(n*1\)的向量。便可經過最小角迴歸法求得最小化該模型的參數\(\omega\)。數據結構
首先把矩陣\(X\)當作\(n\)個\(m*1\)的向量\(X_i \quad(i=1,2,\cdots,n)\),以後選擇與向量\(Y\)餘弦類似度最大,即與\(Y\)最爲接近的一個變量\(X_i\),使用相似於前向選擇法中的殘差計算方法獲得新的目標\(Y_{err}\),此時不一樣於前向梯度法的一小步一小步走,而是走到出現一個\(X_j\quad(j=1,2,i-1,i+1,\cdots,n)\)的時候,此時\(X_i\)和\(Y_{err}\)的餘弦類似度等於\(X_j\)和\(Y_{err}\)的餘弦類似度,這個時候殘差\(Y_{err}\)沿着\(X_i\)和\(X_j\)的角平分線方向走,知道出現第三個特徵\(X_k\)和\(Y_{err}\)的相關度等於\(X_i\)和\(Y_{err}\)的餘弦類似度等於\(X_j\)和\(Y_{err}\)的餘弦類似度的時候,使用這三者的共同角平分線,做爲殘差\(Y_{err}\)的路徑方向,直到全部變量取完了,中止算法,便可獲得\(\omega\)。機器學習
# 舉例圖例 import matplotlib.pyplot as plt from matplotlib.font_manager import FontProperties %matplotlib inline font = FontProperties(fname='/Library/Fonts/Heiti.ttc') # X1*w1 plt.annotate(xytext=(2, 5), xy=(8, 5), s='', color='r', arrowprops=dict(arrowstyle="->", color='r')) plt.text(6, 4.5, s='$X_1*\omega_1$', color='g') # X1 plt.annotate(xytext=(2, 5), xy=(4, 5), s='', color='r', arrowprops=dict(arrowstyle="->", color='k')) plt.text(2.5, 4.5, s='$X_1$', color='g') # X2 plt.annotate(xytext=(2, 5), xy=(3, 7), s='', color='r', arrowprops=dict(arrowstyle="->", color='k')) plt.text(2, 6, s='$X_2$', color='g') # Y plt.annotate(xytext=(2, 5), xy=(12, 8), s='', color='r', arrowprops=dict(arrowstyle="->", color='k')) plt.text(5, 7.5, s='$Y$', color='g') # X1 plt.annotate(xytext=(8, 5), xy=(10, 5), s='', color='r', arrowprops=dict(arrowstyle="->", color='r')) plt.text(8.5, 4.5, s='$X_1$', color='g') # X2 plt.annotate(xytext=(8, 5), xy=(9, 7), s='', color='r', arrowprops=dict(arrowstyle="->", color='r')) plt.text(8, 6, s='$X_2$', color='g') # w2(X1+X2) plt.annotate(xytext=(8, 5), xy=(12, 8), s='', color='r', arrowprops=dict(arrowstyle="->", color='gray')) plt.text(10.5, 6.3, s='$(X_1+X_2)\omega_2$', color='g') plt.xlim(0, 13) plt.ylim(2, 13) plt.title('最小角迴歸法舉例', fontproperties=font, fontsize=20) plt.show()
上圖假設\(X\)爲\(2\)維,首先能夠看出,離\(Y\)最接近的是\(X_1\),首先在\(X_1\)上走一段距離,知道殘差和\(X_1\)的相關度等於殘差和\(X_2\)的相關度,即殘差在\(X_1\)和\(X_2\)的角平分線上,因爲\(X\)爲\(2\)維,此時沿着角平分線走,直到殘差足夠小時中止,若是此時\(X\)不是\(2\)維,則繼續選擇第3個、第4個特徵走下去。學習
前向選擇法因爲涉及到投影,只能給出一個近似解;前向梯度法則須要本身手動調試一個很好的\(\epsilon\)參數;最小角迴歸法結合了二者的優勢,可是至於算法具體好壞害的取決於訓練集,即算法的穩定性沒法保證。網站
對算法具體計算有興趣的同窗,能夠參考Bradley Efron的論文《Least Angle Regression》,https://pan.baidu.com/s/10if9FGdkwEZ4_BolzCGszA ,若是你下載看了,恭喜你入坑。人工智能