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 ,若是你下载看了,恭喜你入坑。人工智能

相关文章
相关标签/搜索