最小角回归算法定义_有无回归算法

最小角回归算法定义_有无回归算法最小角回归算法(LeastAngleRegression,LAR)是一种针对于线性回归问题,快速进行特征选择和回归系数计算的迭代算法,其被广泛推广用于求解线性回归以及Lasso回归问题。最小角回归算法的核心思想为:将回归目标向量依次分解为若干组特征向量的线性组合,最终使得与所有特征均线性无关的残差向量最小。可见,最小角回归算法的关键在于选择正确的特征向量分解顺序和分解系数。为了更好的表示最…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

最小角回归算法(Least Angle Regression,LAR)是一种针对于线性回归问题,快速进行特征选择和回归系数计算的迭代算法,其被广泛推广用于求解线性回归以及Lasso回归问题。

最小角回归算法的核心思想为:将回归目标向量依次分解为若干组特征向量的线性组合,最终使得与所有特征均线性无关的残差向量最小。

可见,最小角回归算法的关键在于选择正确的特征向量分解顺序和分解系数。为了更好的表示最小角回归的分解过程,本文以线性回归问题为例,分别介绍相关的前向选择算法、前向梯度算法和最小角回归算法。

会方便描述,本文的算法几何展示均简化为在二维平面内的回归问题(忽略偏置项): y = θ 1 x 1 + θ 2 x 2 y=\theta_1x_1+\theta_2x_2 y=θ1x1+θ2x2其中 x 1 、 x 2 x_1、x_2 x1x2为两组特征向量, θ 1 、 θ 2 \theta_1、\theta_2 θ1θ2为预求的回归系数。同时定义残差向量 y ( i ) y^{(i)} y(i)为:第 i i i次特征向量线性组合后,与目标向量间的向量差。因此初始残差 y ( 0 ) y^{(0)} y(0)即为目标向量 y y y
在这里插入图片描述

一、前向选择(Forward Selection)算法

前向选择算法,是一种贪婪的对目标向量进行特征分解的算法。

其计算流程如下:

(1)选择一个与目标向量 y ( 0 ) y^{(0)} y(0)(初始残差向量)相关度最高(如余弦夹角最小)的特征向量 x i x_i xi方向,将目标向量在该方向 x i x_i xi上进行投影,得到第二轮的目标残差向量 y ( 0 ) − θ 1 x i y^{(0)}-\theta_1x_i y(0)θ1xi

(2)从尚未被使用过的特征向量中,选择与当前目标残差向量相关度最高的特征向量方向进行投影,将目标向量减去前面各轮中的投影向量,得到下一轮的目标残差方向 y ( 0 ) − ∑ i θ i x i y^{(0)}-\sum\limits_i\theta_ix_i y(0)iθixi

(3)重复步骤(2)直至终止条件。终止条件可为:a)无目标残差;b)无多余特征向量;c)残差向量足够小。

将上述计算流程应用在二维平面内,可见下图。其中黑色线为特征向量;红色线为各轮的目标残差向量;绿色线为各轮的投影值;上标为第 i i i轮。
在这里插入图片描述
前向选择算法简单粗暴,各特征向量最多使用一次,每轮的目标残差方向均与上一轮采用的特征向量方向正交。

但因为其忽略了各特征向量间可能存在的线性关系,仅作盲目的依次投影,因此计算较为粗糙,只能给出局部近似解。

二、前向梯度(Forward Stagewise)算法

前向梯度算法与前向选择算法的基本思想一致,但并没有盲目进行直接投影,而是采用了小步试错的方法,采用更谨慎细致的向量选择保证每一小步分解的合理性。

其计算流程如下:

(1)选择一个与本轮目标残差向量 y ( i ) y^{(i)} y(i)相关度最高(如余弦夹角最小)的特征向量 x i x_i xi方向,在该方向 x i x_i xi移动一小步 ϵ x i \epsilon x_i ϵxi,得到下一轮的目标残差向量 y ( 0 ) − ∑ i ϵ x i y^{(0)}-\sum\limits_i\epsilon x_i y(0)iϵxi

(2)以全量特征向量为候选集,重复步骤(1)直至终止条件。终止条件可为:a)无目标残差;b)残差向量足够小。

在前向梯度算法中,每轮的候选特征向量均为全量的特征向量,因此每个特征向量可能会被多次使用。当 ϵ \epsilon ϵ值很小时,可以得到精确的最优解,但此时计算量很大。

将上述计算流程应用在二维平面内,可见下图。
在这里插入图片描述

三、最小角回归算法

最小角回归算法是前向选择算法的快速性与前向梯度算法的准确性两者间的折中。

其计算流程如下:

(1)选择一个与初始目标残差向量 y ( 0 ) y^{(0)} y(0)相关度最高(如余弦夹角最小)的特征向量 x i x_i xi方向,在该方向 x i x_i xi上移动某个步长 θ i \theta_i θi,使得此时的残差向量 y ( 0 ) − θ i x i y^{(0)}-\theta_i x_i y(0)θixi与特征向量 x i x_i xi以及另一个相关度最高的特征向量 x j x_j xj的相关度相等(或者说,使得 y ( 0 ) − θ i x i y^{(0)}-\theta_i x_i y(0)θixi恰好位于 x i x_i xi x j x_j xj的角平分线上);

(2)以上述角平分线方向(亦是当前残差向量方向)为新的特征向量搜索方向进行移动某个步长 θ i \theta_i θi,使得残差向量 y ( 0 ) − ∑ i θ i x i y^{(0)}-\sum\limits_i\theta_i x_i y(0)iθixi与先前用到的各特征向量间的相关度与剩余特征集合中相关度最高的特征向量相关度相等(或者说,使得 y ( 0 ) − ∑ i θ i x i y^{(0)}-\sum\limits_i\theta_i x_i y(0)iθixi位于上述各特征向量的空间角平方线上);

(3)重复步骤(2)直至终止条件。终止条件可为:终止条件可为:a)无目标残差;b)无多余特征向量;c)残差向量足够小。

将上述计算流程应用在二维平面内,可见下图。
在这里插入图片描述
在最小角回归算法中,各特征向量最多使用一次,其通过准确得到每步最优的分解长度保证了计算的准确性和速度。其主要优点包括:

1)特别适合于特征维度n 远高于样本数m的情况;

2)算法的最坏计算复杂度和最小二乘法类似,但是其计算速度几乎和前向选择算法一样;

3)可以产生分段线性结果的完整路径,这在模型的交叉验证中极为有用。

但注意到最小角回归的迭代方向是基于目标残差方向,所以其很容易受到噪声的影响

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/171765.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 11gR2 Database Services for "Policy" and "Administrator" Managed Databases (文件 ID 1481647.1)

    11gR2 Database Services for "Policy" and "Administrator" Managed Databases (文件 ID 1481647.1)

  • vscode取消注释的快捷键_vscode解除注释

    vscode取消注释的快捷键_vscode解除注释注释CTRL+K+C取消注释CTRL+K+U

  • 如何解决vscode感叹号无法建立html文件的问题

    如何解决vscode感叹号无法建立html文件的问题今天是我使用vscode的第二天,没想到昨天还能用感叹号(!)建立文件模板的vscode今天却不行了,而且中途也重装过一次。虽然重装后能用感叹号(!)弄一个模板出来,但是在此新建文件的时候就没用了。所以我一直在思索为什么会这样,最终功夫不负有心人还是给我找到了。在此,谢谢那位给我指名方向的大佬。正确方法是输入html:5,然后回车就能出现模板了。因为vscode升级了,所以关于模板的设定可能出现了一些变化吧。在这里恳求大家了,如果各位读者觉得好用的话就动动小手点赞吧。拜托了。…

  • c++时间戳转换日期格式_java时间戳转换成时间

    c++时间戳转换日期格式_java时间戳转换成时间因工作需要,经常跟时间戳打交道,但是因为它仅仅是一个数字,我们很难直接看出它有什么意义,或两个时间戳之间究竟差了多长的间隔。于是从MSDNforVisualStudio6上找到了时间戳转换成日期时间的算法。本文除介绍这一算法外,还提供一个示例代码。1、将时间戳转换成一串32比特的二进制数。有些数字转换之后不够32位,则在前面补充0。这可通过windows自带的计算器完成。比如48152254…

  • python中dropna()什么意思_python dropna函数

    python中dropna()什么意思_python dropna函数我正在尝试平均化熊猫的一组数据。csv文件中的数据。我有一个系列节目叫“轨道”。在前面的阶段中,我使用了dropna()方法来删除在读取csv文件时导入的一些空白行。在我使用的方法是平均5行以上的列。我不能使用滚动平均法,因为我希望使用当前值之前的两行、当前值和当前值之后的两行来获取平均值。在当我得到数据时,我遇到了一些问题,这些数据中的NaN数据已经被删除,因为标签也被删除了。在defget_…

  • 广义表中关于tail和head的计算

    广义表中关于tail和head的计算根据表头、表尾的定义可知:任何一个非空广义表的表头是表中第一个元素,它可以是原子,也可以是子表,而其表尾必定是子表。也就是说,广义表的head操作,取出的元素是什么,那么结果就是什么。但是tail操作取出的元素外必须加一个表——“ ()“举一个简单的列子:已知广义表LS=((a,b,c),(d,e,f)),如果需要取出这个e这个元素,那么使用tail和head如何将这个取出来。利用上面说的,tai…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号