更新、更全的《机器学习》的更新网站,更有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()

![png](http://www.chenyoude.com/ml/A-06 最小角回归法_3_0.png?x-oss-process=style/watermark)

上图假设\(X\)为\(2\)维,首先可以看出,离\(Y\)最接近的是\(X_1\),首先在\(X_1\)上走一段距离,知道残差和\(X_1\)的相关度等于残差和\(X_2\)的相关度,即残差在\(X_1\)和\(X_2\)的角平分线上,由于\(X\)为\(2\)维,此时沿着角平分线走,直到残差足够小时停止,如果此时\(X\)不是\(2\)维,则继续选择第3个、第4个特征走下去。

二、最小角回归法优缺点

2.1 优点

  1. 特别适合特征维度高于样本数的情况

2.2 缺点

  1. 迭代方向是根据目标的残差定的,所以算法对训练集中的噪声特别敏感

三、小结

前向选择法由于涉及到投影,只能给出一个近似解;前向梯度法则需要自己手动调试一个很好的\(\epsilon\)参数;最小角回归法结合了两者的优点,但是至于算法具体好坏害的取决于训练集,即算法的稳定性无法保证。

对算法具体计算有兴趣的同学,可以参考Bradley Efron的论文《Least Angle Regression》,https://pan.baidu.com/s/10if9FGdkwEZ4_BolzCGszA ,如果你下载看了,恭喜你入坑。

A-06 最小角回归法的更多相关文章

  1. Lasso回归算法: 坐标轴下降法与最小角回归法小结

    前面的文章对线性回归做了一个小结,文章在这: 线性回归原理小结.里面对线程回归的正则化也做了一个初步的介绍.提到了线程回归的L2正则化-Ridge回归,以及线程回归的L1正则化-Lasso回归.但是对 ...

  2. 机器学习方法:回归(三):最小角回归Least Angle Regression(LARS),forward stagewise selection

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 希望与志同道合的朋友一起交流,我刚刚设立了了一个技术交流QQ群:433250724,欢迎对算法.技术.应用感 ...

  3. 最小角回归 LARS算法包的用法以及模型参数的选择(R语言 )

    Lasso回归模型,是常用线性回归的模型,当模型维度较高时,Lasso算法通过求解稀疏解对模型进行变量选择.Lars算法则提供了一种快速求解该模型的方法.Lars算法的基本原理有许多其他文章可以参考, ...

  4. LARS 最小角回归算法简介

    最近开始看Elements of Statistical Learning, 今天的内容是线性模型(第三章..这本书东西非常多,不知道何年何月才能读完了),主要是在看变量选择.感觉变量选择这一块领域非 ...

  5. 从最小角回归(LARS)中学到的一个小知识(很短)

    [转载请注明出处]http://www.cnblogs.com/mashiqi (居然有朋友说内容不接地气,那么我就再加一段嘛,请喜欢读笑话的同学直接看第二段)假设这里有一组向量$\left\{ x_ ...

  6. 【HDU3374】 String Problem (最小最大表示法+KMP)

    String Problem Description Give you a string with length N, you can generate N strings by left shift ...

  7. 对数几率回归法(梯度下降法,随机梯度下降与牛顿法)与线性判别法(LDA)

    本文主要使用了对数几率回归法与线性判别法(LDA)对数据集(西瓜3.0)进行分类.其中在对数几率回归法中,求解最优权重W时,分别使用梯度下降法,随机梯度下降与牛顿法. 代码如下: #!/usr/bin ...

  8. 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 ...

  9. HDU3374 String Problem —— 最小最大表示法 + 循环节

    题目链接:https://vjudge.net/problem/HDU-3374 String Problem Time Limit: 2000/1000 MS (Java/Others)    Me ...

随机推荐

  1. 【Redis】主从复制

    一.概述 1.redis的复制功能是支持多个数据库之间的数据同步.一类是主数据库(master)一类是从数据库(slave),主数据库可以进行读写操作,当发生写操作的时候自动将数据同步到从数据库,而从 ...

  2. 【Redis】发布订阅

    一.概述 Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息. Redis 客户端可以订阅任意数量的频道. 下图展示了频道 channel1 ...

  3. 【Redis】基础学习概览【汇总】

    一.概述 1.1 简介 1.2 Redis单线程好处 1.3 单线程弊端 1.4 Redis应用场景 二.安装.开启以及关闭 三.Redis基本数据类型 四.SpringBoot整合Redis 五.R ...

  4. Docker详解(二)

    目录 1.Docker常用命令 1.1 镜像命令 1.2 容器命令 1.2.1 常用的容器命令 1.2.2 重要的容器命令 序言:上一章我们初步介绍了一下Docker的概念,那么这次我们着手于Dock ...

  5. cmd命令查看已连接的WiFi密码

      实验环境:Windows 10.命令提示符(管理员权限) 一.CMD命令查看WiFi密码 使用方法: ①.运行CMD(命令提示符) (确保无线网卡启用状态)②.输入命令查看WiFi配置文件:  # ...

  6. 谈谈你对HTML语义化的理解。

    1.什么是HTML语义化? 基本上都是围绕着几个主要的标签,像标题(h1-h6),列表(li),强调(strong em)等. 根据内容的语义化(内容结构化),选择合适的标签(代码语义化),便于开发者 ...

  7. 时钟AnalogClock和DigitalClock

    <AnalogClock android:layout_width="fill_parent" android:layout_height="fill_parent ...

  8. CTF常用软件/工具

    慢慢更新 整合版: http://www.jz5u.com/Soft/Progra/tool/163275.html/ 各种在线工具以及工具整合 http://www.ctftools.com/ 逆向 ...

  9. python2.7过渡到python3.6时遇到的差异总结

    1.Python3中print为一个函数,必须用括号括起来而Python2中print为class print('hello') 2.python3将raw_input和input进行了整合,只有in ...

  10. 基于操作系统原理的Red Hat Linux的基本操作

    一.实验目的 1.了解Linux操作系统的启动与登录方法. 2.掌握Red Hat Linux图形用户界面下的基本操作. 3.学会Red Hat Linux基本设置. 二.实验内容 1. 登录 2. ...