A-06 最小角回归法
更新、更全的《机器学习》的更新网站,更有python、go、数据结构与算法、爬虫、人工智能教学等着你:https://www.cnblogs.com/nickchen121/p/11686958.html
最小角回归法
最小角回归相当于前向选择法和前向梯度法的一个折中算法,简化了前项梯度法因\(\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\)。
一、举例
# 举例图例
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()

上图假设\(X\)为\(2\)维,首先可以看出,离\(Y\)最接近的是\(X_1\),首先在\(X_1\)上走一段距离,知道残差和\(X_1\)的相关度等于残差和\(X_2\)的相关度,即残差在\(X_1\)和\(X_2\)的角平分线上,由于\(X\)为\(2\)维,此时沿着角平分线走,直到残差足够小时停止,如果此时\(X\)不是\(2\)维,则继续选择第3个、第4个特征走下去。
二、最小角回归法优缺点
2.1 优点
- 特别适合特征维度高于样本数的情况
2.2 缺点
- 迭代方向是根据目标的残差定的,所以算法对训练集中的噪声特别敏感
三、小结
前向选择法由于涉及到投影,只能给出一个近似解;前向梯度法则需要自己手动调试一个很好的\(\epsilon\)参数;最小角回归法结合了两者的优点,但是至于算法具体好坏害的取决于训练集,即算法的稳定性无法保证。
对算法具体计算有兴趣的同学,可以参考Bradley Efron的论文《Least Angle Regression》,https://pan.baidu.com/s/10if9FGdkwEZ4_BolzCGszA ,如果你下载看了,恭喜你入坑。
A-06 最小角回归法的更多相关文章
- Lasso回归算法: 坐标轴下降法与最小角回归法小结
前面的文章对线性回归做了一个小结,文章在这: 线性回归原理小结.里面对线程回归的正则化也做了一个初步的介绍.提到了线程回归的L2正则化-Ridge回归,以及线程回归的L1正则化-Lasso回归.但是对 ...
- 机器学习方法:回归(三):最小角回归Least Angle Regression(LARS),forward stagewise selection
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 希望与志同道合的朋友一起交流,我刚刚设立了了一个技术交流QQ群:433250724,欢迎对算法.技术.应用感 ...
- 最小角回归 LARS算法包的用法以及模型参数的选择(R语言 )
Lasso回归模型,是常用线性回归的模型,当模型维度较高时,Lasso算法通过求解稀疏解对模型进行变量选择.Lars算法则提供了一种快速求解该模型的方法.Lars算法的基本原理有许多其他文章可以参考, ...
- LARS 最小角回归算法简介
最近开始看Elements of Statistical Learning, 今天的内容是线性模型(第三章..这本书东西非常多,不知道何年何月才能读完了),主要是在看变量选择.感觉变量选择这一块领域非 ...
- 从最小角回归(LARS)中学到的一个小知识(很短)
[转载请注明出处]http://www.cnblogs.com/mashiqi (居然有朋友说内容不接地气,那么我就再加一段嘛,请喜欢读笑话的同学直接看第二段)假设这里有一组向量$\left\{ x_ ...
- 【HDU3374】 String Problem (最小最大表示法+KMP)
String Problem Description Give you a string with length N, you can generate N strings by left shift ...
- 对数几率回归法(梯度下降法,随机梯度下降与牛顿法)与线性判别法(LDA)
本文主要使用了对数几率回归法与线性判别法(LDA)对数据集(西瓜3.0)进行分类.其中在对数几率回归法中,求解最优权重W时,分别使用梯度下降法,随机梯度下降与牛顿法. 代码如下: #!/usr/bin ...
- kuangbin专题十六 KMP&&扩展KMP HDU3347 String Problem(最小最大表示法+kmp)
Give you a string with length N, you can generate N strings by left shifts. For example let consider ...
- HDU3374 String Problem —— 最小最大表示法 + 循环节
题目链接:https://vjudge.net/problem/HDU-3374 String Problem Time Limit: 2000/1000 MS (Java/Others) Me ...
随机推荐
- 数论 Day 13
数论_CRT(中国剩余定理)& Lucas (卢卡斯定理) 前言 又是一脸懵逼的一天. 正文 按照道理来说,我们应该先做一个介绍. 中国剩余定理 中国剩余定理,Chinese Remainde ...
- java多线程之Executor框架
Executor框架简介 Executor框架的结构 Executor框架主要由3大部分组成: 任务: 包括被执行的任务需要实现的接口:Runable 接口.Callable接口: 任务的执行: 包括 ...
- SVN中忘记上传自己写的工程,但是IP已经变了的解决方案
苦于自己没有养成每天下班上传SVN的好习惯,第二天来又发现IP变了,只得把自己写的删掉,记录一下解决方法: 第一个红框中的svn://192.168.0.103/FH是前一天的IP链接地址,结果发现今 ...
- 【UEFI】---BIOS中UserPassword的重复校验总结
UEFI作为目前较为流行的一套X86架构初始化的标准框架,已受到业界内的广泛认可.而其中很多编程所采用的思想确实值得学习.今天总结下UEFI的框架下修改代码的一点小经验,仅供菜鸟参考. 先列干货,具体 ...
- jstat虚拟机统计信息监视工具
jstsat(JVM Statistics Monitoring Tool) jstat用于监视虚拟机各种运行状态信息的命令工具.可以显示本地或者远程虚拟机进程中的类装载.内存.垃圾收集.JIT编译等 ...
- Android图片的缩放效果
一.概述 Android 图片要实现:手势滑动,双击变大,多点触控的效果. 其实是有一定难度的,我们需要用Matrix ,GestureDetector 等等需要完成一个复杂的逻辑才能实现,然而今天我 ...
- Java-HashSet集合中的几种遍历方式
//我们先创建一个set集合 public static void main(String[] args) { Set<Integer> sets = new HashSet<> ...
- 使用Bookinfo应用测试Kuma服务网格
最近,开源API管理平台Kong服务供应商近日放出了新的开源项目Kuma.本文尝试将 bookinfo 应用部署在 Kuma 网格中,以便帮助大家更好的理解 Kuma 项目. Kuma是能用于管理 ...
- CTC安装及其错误解决办法:binding.cpp:92:49: error: cannot convert ‘THCudaTensor*’ to ‘const THFloatTensor*’ for argument ‘1’ to ‘int64_t THFloatTensor_size(const THFloatTensor*, int)’
CTC安装: 1. 在终端执行命令:git clone https://github.com/SeanNaren/warp-c) (效果如下图,大家不用管我前面括号的内容,那是我打开的虚拟环境) 2. ...
- linux 操作系统级别监控 vmstat/dstat 命令
vmstat命令综合了CPU.进程.内存.磁盘IO等信息 命令:vmstat 1 表示vmstat每2秒采集数据,一直采集,直到我结束程序 vmstat 2 1 表示每个两秒采集一次 ...