A-06 最小角迴歸法

更新、更全的《機器學習》的更新網站,更有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\)機器學習

1、舉例

# 舉例圖例
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()

png

上圖假設\(X\)\(2\)維,首先能夠看出,離\(Y\)最接近的是\(X_1\),首先在\(X_1\)上走一段距離,知道殘差和\(X_1\)的相關度等於殘差和\(X_2\)的相關度,即殘差在\(X_1\)\(X_2\)的角平分線上,因爲\(X\)\(2\)維,此時沿着角平分線走,直到殘差足夠小時中止,若是此時\(X\)不是\(2\)維,則繼續選擇第3個、第4個特徵走下去。學習

2、最小角迴歸法優缺點

2.1 優勢

  1. 特別適合特徵維度高於樣本數的狀況

2.2 缺點

  1. 迭代方向是根據目標的殘差定的,因此算法對訓練集中的噪聲特別敏感

3、小結

前向選擇法因爲涉及到投影,只能給出一個近似解;前向梯度法則須要本身手動調試一個很好的\(\epsilon\)參數;最小角迴歸法結合了二者的優勢,可是至於算法具體好壞害的取決於訓練集,即算法的穩定性沒法保證。網站

對算法具體計算有興趣的同窗,能夠參考Bradley Efron的論文《Least Angle Regression》,https://pan.baidu.com/s/10if9FGdkwEZ4_BolzCGszA ,若是你下載看了,恭喜你入坑。人工智能

相關文章
相關標籤/搜索