机器学习——回归算法之最小角回归(Least angle regression, LARS)

机器学习——回归算法之最小角回归(Least angle regression, LARS)

前言

最小角回归涉及到了相关系数(current correlations),但这里并不会具体定义相关系数的定义,只需要在知道它是用来衡量两个变量相关程度的就可以了。

算法思想

这里用一张图来说明算法的基本思想:
从 简 单 的 情 况 说 明 , 假 设 有 两 个 样 本 x 1 和 x 2 , 真 实 标 签 为 y 2 ^ ( 图 中 绿 色 的 , 请 自 行 屏 蔽 绿 色 的 y 1 ^ 因 为 它 对 于 说 明 算 法 思 想 每 啥 用 ) 从简单的情况说明,假设有两个样本x_{1}和x_{2},真实标签为\hat{y_{2}}(图中绿色的,请自行屏蔽绿色的\hat {y_{1}}因为它对于说明算法思想每啥用) x1x2y2^(绿绿y1^)
算 法 从 μ 0 ^ = 0 开 始 , 从 图 中 也 可 以 看 出 , y 2 ^ − μ 0 ^ 显 然 比 x 2 更 靠 近 x 1 , 这 个 “ 靠 近 程 度 ” 使 用 相 关 系 数 来 衡 量 的 , 即 : 算法从\hat{ \mu_{0}}=0开始,从图中也可以看出,\hat{y_{2}}- \hat{\mu_{0}}显然比x_{2}更靠近x_{1},这个“靠近程度”使用相关系数来衡量的,即: μ0^=0y2^μ0^x2x1使
c 1 ( μ 0 ^ ) = x 1 ( y 2 ^ − μ 0 ^ ) (1) c_{1}(\hat{\mu_{0}})=x_{1}(\hat{y_{2}}-\hat{\mu_{0}})\tag{1} c1(μ0^)=x1(y2^μ0^)(1)
c 2 ( μ 0 ^ ) = x 2 ( y 2 ^ − μ 0 ^ ) (2) c_{2}(\hat{\mu_{0}})=x_{2}(\hat{y_{2}}-\hat{\mu_{0}})\tag{2} c2(μ0^)=x2(y2^μ0^)(2)
c 1 ( μ 0 ^ ) > c 2 ( μ 0 ^ ) (3) c_{1}(\hat{\mu_{0}})>c_{2}(\hat{\mu_{0}})\tag{3} c1(μ0^)>c2(μ0^)(3)
于是算法会沿着 x 1 x_{1} x1走一步,走多大呢?这里有个公式( γ 1 可 以 看 成 是 步 长 \gamma_{1}可以看成是步长 γ1):
μ 1 ^ = μ 0 ^ + γ 1 ^ x 1 (4) \hat{\mu_{1}}=\hat{\mu_{0}}+\hat{\gamma_{1}}x_{1}\tag{4} μ1^=μ0^+γ1^x1(4)
然后再计算:
c 1 ( μ 1 ) = x 1 ( y 2 ^ − μ 1 ^ ) (5) c_{1}(\mu_{1})=x_{1}(\hat{y_{2}}-\hat{\mu_{1}})\tag{5} c1(μ1)=x1(y2^μ1^)(5)
c 2 ( μ 1 ) = x 2 ( y 2 ^ − μ 1 ^ ) (6) c_{2}(\mu_{1})=x_{2}(\hat{y_{2}}-\hat{\mu_{1}})\tag{6} c2(μ1)=x2(y2^μ1^)(6)
发现此时:
c 1 ( μ 1 ) = c 2 ( μ 1 ) (7) c_{1}(\mu_{1})=c_{2}(\mu_{1})\tag{7} c1(μ1)=c2(μ1)(7)

怎么解释上面的等式?看图,将 x 2 向 右 平 移 到 μ 1 ^ 处 , y 2 ^ − μ 1 ^ 可 以 看 成 平 分 x 1 和 x 2 之 间 的 夹 角 。 x_{2}向右平移到\hat{\mu_{1}}处,\hat{y_{2}} - \hat{\mu_{1}}可以看成平分x_{1}和x_{2}之间的夹角。 x2μ1^y2^μ1^x1x2
y 2 ^ − μ 1 ^ 是 坐 落 在 单 位 向 量 μ 2 的 方 向 上 的 \hat{y_{2}}-\hat{\mu_{1}}是坐落在单位向量\mu_{2}的方向上的 y2^μ1^μ2,那么下一步的更新方向是: μ 2 ^ = μ 1 ^ + γ 2 ^ μ 2 \hat{\mu_{2}}=\hat{\mu_{1}}+\hat{\gamma_{2}}\mu_{2} μ2^=μ1^+γ2^μ2
在两个样本的情况下, γ 2 ^ \hat{\gamma_{2}} γ2^是需要选择合适的大小(有两种选择算法可供选择 γ ^ \hat{\gamma_{}} γ^)使得 μ 2 ^ = y 2 ^ \hat{\mu_{2}}=\hat{y_{2}} μ2^=y2^,得到最终的线性回归结果。
在这里插入图片描述这里仅使用二维(两个样本)举例说明,高维情况也是如此。 γ ^ \hat{\gamma} γ^就是算法需要学习的参数,具体公式见此。LARS 和逐步回归很像。在每一步,它寻找与响应最有关联的 预测。当有很多预测有相同的关联时,它没有继续利用相同的预测,而是在这些预测中找出应该等角的方向。
优点:

  • 特别适合于特征维度n 远高于样本数m的情况。
  • 算法的最坏计算复杂度和最小二乘法类似,但是其计算速度几乎和前向选择算法一样
  • 可以产生分段线性结果的完整路径,这在模型的交叉验证中极为有用

缺点:

  • 由于LARS的迭代方向是根据目标的残差而定,所以该算法对样本的噪声极为敏感。

示例代码

import numpy as np
import matplotlib.pyplot as plt
 
from sklearn import linear_model
from sklearn import datasets
 
diabetes = datasets.load_diabetes()
X = diabetes.data
y = diabetes.target
 
print("Computing regularization path using the LARS ...")
alphas, _, coefs = linear_model.lars_path(X, y, method='lasso', verbose=True)
 
xx = np.sum(np.abs(coefs.T), axis=1)
xx /= xx[-1]
 
plt.plot(xx, coefs.T)
ymin, ymax = plt.ylim()
plt.vlines(xx, ymin, ymax, linestyle='dashed')
plt.xlabel('|coef| / max|coef|')
plt.ylabel('Coefficients')
plt.title('LASSO Path')
plt.axis('tight')
plt.show()
##################################
#reg = linear_model.LassoLars(alpha)这块的alpha可使用前面返回的alphas

在这里插入图片描述

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值