机器学习——回归算法之最小角回归(Least angle regression, LARS)
前言算法思想示例代码前言
最小角回归涉及到了相关系数(current correlations),但这里并不会具体定义相关系数的定义,只需要在知道它是用来衡量两个变量相关程度的就可以了。
算法思想
这里用一张图来说明算法的基本思想:
从 简 单 的 情 况 说 明 , 假 设 有 两 个 样 本 x 1 和 x 2 , 真 实 标 签 为 y 2 ^ ( 图 中 绿 色 的 , 请 自 行 屏 蔽 绿 色 的 y 1 ^ 因 为 它 对 于 说 明 算 法 思 想 每 啥 用 ) 从简单的情况说明,假设有两个样本x_{1}和x_{2},真实标签为\hat{y_{2}}(图中绿色的,请自行屏蔽绿色的\hat {y_{1}}因为它对于说明算法思想每啥用) 从简单的情况说明,假设有两个样本x1和x2,真实标签为y2^(图中绿色的,请自行屏蔽绿色的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^=0开始,从图中也可以看出,y2^−μ0^显然比x2更靠近x1,这个“靠近程度”使用相关系数来衡量的,即:
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^可以看成平分x1和x2之间的夹角。
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 npimport matplotlib.pyplot as pltfrom sklearn import linear_modelfrom sklearn import datasetsdiabetes = datasets.load_diabetes()X = diabetes.datay = diabetes.targetprint("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
如果觉得《机器学习——回归算法之最小角回归(Least angle regression LARS)》对你有帮助,请点赞、收藏,并留下你的观点哦!