首页 > 编程语言 >最小二乘法的矩阵正则化改进——“岭回归”和“LASSO回归”算法

最小二乘法的矩阵正则化改进——“岭回归”和“LASSO回归”算法

时间:2023-06-03 21:37:40浏览次数:53  
标签:loss self reg 正则 model data 回归 LASSO

看代码过程中发现了一个很奇怪的概念,叫做“最小二乘法的矩阵正则化”,这个词汇十分的陌生,虽然最小二乘法是知道的,但是用了矩阵正则化的最小二乘法是个什么东西呢?

 

 

相关代码见:

强化学习:连续控制问题中Actor-Critic算法的linear baseline

 

 

后来在网上一通查才知道,原来“最小二乘法的二范数矩阵正则化”就是“岭回归”算法,而“最小二乘法的一范数矩阵正则化”就是“LASSO回归”算法。

不得不感慨,为什么有的人写东西总是要挑那些令人生疏的词汇表达,用一些常见的词汇表达不是更易懂嘛。

 

 

note: 本文不对“岭回归”和“LASSO回归”算法进行数学推导和数学解释,也不从统计学上给出显著性解释,本文就是解释一下算法概念的别名。

 

 

-----------------------------------------------------

 

 

给出岭回归的推导公式:


 

最小二乘法的矩阵正则化改进——“岭回归”和“LASSO回归”算法_岭回归

 

 

 

sklearn对Longley数据集进行岭回归计算:


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])

 

最小二乘法的矩阵正则化改进——“岭回归”和“LASSO回归”算法_杂谈_02

 

 

 

 

----------------------------------------------------------

 

 

给出一个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

 

标签:loss,self,reg,正则,model,data,回归,LASSO
From: https://blog.51cto.com/u_15642578/6408702

相关文章

  • 在notepad++软件上用正则表达式替换内容
    在notepad++软件上用正则表达式替换内容,查找:(\+\d+)|,在notepad++软件上用正则表达式替换内容示例要求:04,09,18,19,32,33+1403,04,13,18,25,32+0203,08,15,21,22,32+12把以上数据去掉+后面的数据,把分割逗号替换成空格的正则表达式,要在notepad++软件上可以使......
  • linux 正则表达式
    目录一、正则表达式二、元字符三、次数符号四、位置锚定五、实验              一、正则表达式通配符功能是用来处理文件名,而正则表达式是处理文本内容中字符。分类:1. 基本正则表达式2.扩展正则表达式二......
  • 【视频】R语言机器学习高维数据应用:Lasso回归和交叉验证预测房屋市场租金价格
    分析师:JunjunLi在这篇文章中,我们将着重探讨高维数据下的机器学习应用,以房屋市场租金价格预测为例。在实际生活中,房屋租金作为一个重要的经济指标,被广泛应用于城市规划、财务投资等方面的决策中。然而,如何准确地预测房屋租金价格却一直是一个具有挑战性的问题。本文将介绍如何使用L......
  • MATLAB偏最小二乘回归(PLSR)和主成分回归(PCR)分析光谱数据|附代码数据
    全文链接:http://tecdat.cn/?p=2655最近我们被客户要求撰写关于偏最小二乘回归的研究报告,包括一些图形和统计输出。此示例显示如何在matlab中应用偏最小二乘回归(PLSR)和主成分回归(PCR),并讨论这两种方法的有效性 ( 点击文末“阅读原文”获取完整代码数据******** ) 。当存在大量......
  • 2015.4.28_正则表达式_正则表达式简易教程
    为什么使用正则表达式通过正则表达式,可以:测试字符串内的模式。例如,可以测试输入字符串,以查看字符串内是否出现电话号码模式或信用卡号码模式。这称为数据验证。替换文本。可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文本替换它。基于模式匹配从字符串中提......
  • MySQL-正则表达式规范
     MySQL中的正则表达式采用的是PCRE的规范,匹配时按字符进行。RLIKE您可以使用RLIKE语句匹配正则表达式,支持的元字符如下表所示。元字符说明^行首。$行尾。.任意字符。*匹配前面的子表达式0次或多次。+匹配前面的子表达式1次或......
  • python正则表达式之道
    Python使用正则表达式的步骤:1、导入正则表达式模块2、创建Regex对象re.compile(),传入正则表达式3、使用search()方法,传入字符串4、调用group()方法。举例:importre #1ne=re.compile(r'\d\d\d\-\d\d') #2mo=ne.search('yourdatasis456-11.') #3print(mo.gro......
  • 正则表达式原理及其简单实现
    本文从文件依赖依赖这个需求切入,详细阐述了文件依赖分析的实现过程,对于其中所使用到的正则表达式进行原理上的分析,说明了状态机的基本架构以及状态机的最小实现。文件依赖分析如果我想获取某个文件的所有依赖(如下图中的紫色部分),应该怎么做呢【方案1】利用webpack......
  • php正则取值
    以下是一个使用PHP正则表达式获取值的示例代码:$string="Thisisasamplestringcontainingthevalue123.";$pattern='/\d+/';preg_match($pattern,$string,$matches);$value=$matches[0];echo"Thevalueis:".$value;在此示例中,我们使用preg_match函......
  • R语言Lasso回归模型变量选择和糖尿病发展预测模型|附代码数据
    全文链接:http://tecdat.cn/?p=22721最近我们被客户要求撰写关于Lasso回归的研究报告,包括一些图形和统计输出。LeaseAbsoluteShrinkageandSelectionOperator(LASSO)在给定的模型上执行正则化和变量选择 ( 点击文末“阅读原文”获取完整代码数据******** )。根据惩罚项的大小......