最小二乘法的矩阵正则化改进——“岭回归”和“LASSO回归”算法
看代码过程中发现了一个很奇怪的概念,叫做“最小二乘法的矩阵正则化”,这个词汇十分的陌生,虽然最小二乘法是知道的,但是用了矩阵正则化的最小二乘法是个什么东西呢?
相关代码见:
强化学习:连续控制问题中Actor-Critic算法的linear baseline
后来在网上一通查才知道,原来“最小二乘法的二范数矩阵正则化”就是“岭回归”算法,而“最小二乘法的一范数矩阵正则化”就是“LASSO回归”算法。
不得不感慨,为什么有的人写东西总是要挑那些令人生疏的词汇表达,用一些常见的词汇表达不是更易懂嘛。
note: 本文不对“岭回归”和“LASSO回归”算法进行数学推导和数学解释,也不从统计学上给出显著性解释,本文就是解释一下算法概念的别名。
-----------------------------------------------------
给出岭回归的推导公式:
图及代码源自:https://blog.csdn.net/weixin_44831924/article/details/103929256

sklearn对Longley数据集进行岭回归计算:
(数据集见:
https://www.cnblogs.com/devilmaycry812839668/p/17445172.html)
import numpy as np
from numpy import genfromtxt
from sklearn import linear_model
import matplotlib.pyplot as plt # 读入数据
data = genfromtxt(r"longley.csv",delimiter=',')
print(data) # 切分数据
x_data = data[1:,2:]
y_data = data[1:,1]
print(x_data)
print(y_data) # 创建模型
# 生成50个值作为label的候选值,此处是alphas
# linspace默认生成50个值,若想生成100个,可以修改为(0.001,1,100)
alphas_to_test = np.linspace(0.001,1)
# 创建模型,保存误差值,ridge表示岭回归,cv表示交叉验证
model = linear_model.RidgeCV(alphas=alphas_to_test, store_cv_values=True)
model.fit(x_data,y_data) # 岭系数
print(model.alpha_)
# loss值(16个loss值,50个岭系数,每一个系数对应一个loss值)
print(model.cv_values_.shape) # 画图,横坐标是岭系数的50个值,纵坐标是交叉验证法得到的16个loss值的平均值
# 岭系数跟loss值的关系
plt.plot(alphas_to_test,model.cv_values_.mean(axis=0))
# 选取的岭系数值的位置
plt.plot(model.alpha_,min(model.cv_values_.mean(axis=0)),'ro')
plt.show() model.predit(x_data[2,np.newaxis])

----------------------------------------------------------
给出一个pytorch的岭回归代码(部分代码,不可运行):
def fit(self, episodes):
# sequence_length * batch_size x feature_size
featmat = self._feature(episodes).view(-1, self.feature_size)
# sequence_length * batch_size x 1
returns = episodes.returns.view(-1, 1) reg_coeff = self._reg_coeff
eye = torch.eye(self.feature_size, dtype=torch.float32,
device=self.linear.weight.device)
for _ in range(5):
try:
coeffs = torch.linalg.lstsq(
torch.matmul(featmat.t(), featmat) + reg_coeff * eye,
torch.matmul(featmat.t(), returns)
).solution
break
except RuntimeError:
reg_coeff += 10
else:
raise RuntimeError('Unable to solve the normal equations in '
'`LinearFeatureBaseline`. The matrix X^T*X (with X the design '
'matrix) is not full-rank, regardless of the regularization '
'(maximum regularization: {0}).'.format(reg_coeff))
self.linear.weight.data = coeffs.data.t()
详细代码地址:
https://gitee.com/devilmaycry812839668/MAML-Pytorch-RL/blob/master/maml_rl/baseline.py
最小二乘法的矩阵正则化改进——“岭回归”和“LASSO回归”算法的更多相关文章
- 【机器学习】正则化的线性回归 —— 岭回归与Lasso回归
注:正则化是用来防止过拟合的方法.在最开始学习机器学习的课程时,只是觉得这个方法就像某种魔法一样非常神奇的改变了模型的参数.但是一直也无法对其基本原理有一个透彻.直观的理解.直到最近再次接触到这个概念 ...
- 机器学习之五 正则化的线性回归-岭回归与Lasso回归
机器学习之五 正则化的线性回归-岭回归与Lasso回归 注:正则化是用来防止过拟合的方法.在最开始学习机器学习的课程时,只是觉得这个方法就像某种魔法一样非常神奇的改变了模型的参数.但是一直也无法对其基 ...
- 岭回归和lasso回归(转)
回归和分类是机器学习算法所要解决的两个主要问题.分类大家都知道,模型的输出值是离散值,对应着相应的类别,通常的简单分类问题模型输出值是二值的,也就是二分类问题.但是回归就稍微复杂一些,回归模型的输出值 ...
- 线性回归大结局(岭(Ridge)、 Lasso回归原理、公式推导),你想要的这里都有
本文已参与「新人创作礼」活动,一起开启掘金创作之路. 线性模型简介 所谓线性模型就是通过数据的线性组合来拟合一个数据,比如对于一个数据 \(X\) \[X = (x_1, x_2, x_3, ..., ...
- 岭回归和Lasso回归以及norm1和norm2
norm代表的是距离,两个向量的距离:下图代表的就是p-norm,其实是对向量里面元素的一种运算: 最简单的距离计算(规范)是欧式距离(Euclidean distance),两点间距离是如下来算的, ...
- 岭回归与Lasso回归
线性回归的一般形式 过拟合问题及其解决方法 问题:以下面一张图片展示过拟合问题 解决方法:(1):丢弃一些对我们最终预测结果影响不大的特征,具体哪些特征需要丢弃可以通过PCA算法来实现:(2):使用正 ...
- 多元线性回归模型的特征压缩:岭回归和Lasso回归
多元线性回归模型中,如果所有特征一起上,容易造成过拟合使测试数据误差方差过大:因此减少不必要的特征,简化模型是减小方差的一个重要步骤.除了直接对特征筛选,来也可以进行特征压缩,减少某些不重要的特征系数 ...
- 机器学习入门线性回归 岭回归与Lasso回归(二)
一 线性回归(Linear Regression ) 1. 线性回归概述 回归的目的是预测数值型数据的目标值,最直接的方法就是根据输入写出一个求出目标值的计算公式,也就是所谓的回归方程,例如y = a ...
- 吴裕雄 数据挖掘与分析案例实战(7)——岭回归与LASSO回归模型
# 导入第三方模块import pandas as pdimport numpy as npimport matplotlib.pyplot as pltfrom sklearn import mod ...
- 回归算法比较(线性回归,Ridge回归,Lasso回归)
代码: # -*- coding: utf-8 -*- """ Created on Mon Jul 16 09:08:09 2018 @author: zhen &qu ...
随机推荐
- 《Vue3.x +TpyeScript实践指南》勘误
图书出版已有一段时间,书中已发现错误如下: 书的第14页,倒数第3行,npm init -y命令中,init和-y之间应该有个空格: 书的第32页,代码的第1行,应该为模板字符串符号 `,我看印刷的是 ...
- pytest-parallel 多线程执行和allure生成报告,allure生成报告失败
背景: 使用多线程pytest-parallel执行测试用例,使用allure生成测试报告,发现生成报告内容为NaN 使用的pytest执行命令: pytest.main(["TestCas ...
- 配置阿里云yum源
CentOS6 rm -f /etc/yum.repos.d/* wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.co ...
- iOS11之后刷新tableview会出现漂移的现象解决办法
首先要注意这只是在iOS11下会出现的bug,如果iOS10以及以下也有问题的情况不属于此列 问题的动图如下所示,如果要做每隔一段短时间就刷新一个section甚至整个tableview的操作的时候会 ...
- 配置 Nginx + PHP(FastCGI/FPM)
有关概念 Nginx是什么 Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器. Php-fpm是什么 1.c ...
- Mac 版本10.15.4 安装 telnel工具
下载脚本 mac新版本安装telnel发生的变化,进入下面的链接,右键另存为,保存到桌面 https://raw.githubusercontent.com/Homebrew/install/mast ...
- 最简GIF解析代码gif_jumper,用于stb_image的小改进
gif jumper gif支持多帧动画,但是没有存储总帧数,解析gif直到结束才能知道总帧数. 所以gif解析代码,要么采用链表,要么不停realloc()分配内存,stb_image的代码就是如此 ...
- 解决方案 | pyautogui实现等待特定图片(对话框)出现(可设置等待超时时间)
1.问题 为了等待某个[转换完毕]的图片(对话框)出现,如何设置? 2.解决方案代码如下 下面代码实现的是:设置超时时间为10s,当你在完成前序工作以后,代码开始进入等待,一旦你的特定图片出现了,马上 ...
- 阅读翻译Mathematics for Machine Learning之2.5 Linear Independence
阅读翻译Mathematics for Machine Learning之2.5 Linear Independence 关于: 首次发表日期:2024-07-18 Mathematics for M ...
- 一种优秀的虚拟机内存架构 - AQ
源链接:https://www.axa6.com/zh/an-excellent-virtual-machine-memory-architecture 简介 虚拟机内存架构直接影响虚拟机的性能和占用 ...