Ridge回归*

article/2025/9/16 23:27:03

线性回归稍微总结一下:
常见有普通线性回归(没有正则项,目标是最小化均方误差)、LASSO(均方误差项+l-1正则项)、Ridge回归(均方误差+l-2正则项)
加上正则项可以降低过拟合风险。
Ridge回归会使得回归系数非零变量特别多,模型可解释性差。LASSO有特征选择的作用,解出的回归系数有稀疏性。

普通线性回归求解方法: 1.最小二乘(目标求导=0,得到线性方程,直接解出回归稀疏,但是求解过程涉及求样本矩阵的逆)。2.梯度下降。

**Ridge回归求解方法:**与一般线性回归大同小异。
最小二乘结果: w = ( X X T + α I ) − 1 X T Y ) w=(XX^T + \alpha I)^{-1}X^T Y) w=(XXT+αI)1XTY)
梯度下降迭代格式: w = w − β ( X T ( X θ − Y ) + α θ ) w=w-\beta (X^T (X\theta -Y)+\alpha \theta) w=wβ(XT(Y)+αθ)

LASSO回归求解方法: 1.坐标轴下降法 2.最小角回归法(Least Angle Regression, LARS)

Ridge回归sklearn

有:

  1. 普通Ridge回归,Ridge类,需要自己指定一个正则参数alpha。
  2. 交叉验证RidgeCV,给多个正则参数,会返回性能最好的那一个。

普通Ridge回归:

## 读取数据
CCPP_data = pd.read_csv(r"CCPP\Folds5x2_pp.csv")
print(CCPP_data.head())
# 划分特征与标签
X_data = CCPP_data[['AT', 'V', 'AP', 'RH']]
y_data = CCPP_data[['PE']]
# 随机划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_data, y_data, random_state=1)
print(X_train.shape)
print(X_test.shape)
## 普通Ridge回归,需要指定正则参数
ridge_reg = Ridge(alpha=1)
ridge_reg.fit(X_train, y_train)  # 拟合
print(ridge_reg.coef_, ridge_reg.intercept_)

交叉验证RidgeCV:

## 使用交叉验证选择Rige回归的正则参数alpha
# 首先要自己提供几个alpha的备选项,RidgeCV返回性能最好的那一个
ridge_cv = RidgeCV(alphas=[0.01, 0.1, 0.5, 1, 3, 5, 7, 100])
ridge_cv.fit(X_train, y_train)  # 拟合,应该就是把以上参数的ridge都做了一遍
print(ridge_cv.alpha_)  # 输出最优的alpha
print(ridge_cv.score(X_train, y_train))  # 模型评分,注意是关于alpha最优的那个学习器的评分

注意:ridge_cv.score()是关于alpha最优的那个学习器的评分

用scikit-learn研究超参数α和回归系数θ的关系

  • 不知道为啥要fit_intercept=False,我用True的话,系数全都是0。
    自己准备200个α,等比数列
    对每个α做一次训练,得weights
    画图
# 研究回归系数和超参数alpha的关系
# 就是自己准备多个alpha,对每个alpha对应的Ridge模型训练一遍,然后保存每个alpha对应的回归系数,画图
# 准备数据
X = 1. / (np.arange(1, 11) + np.arange(0, 10)[:, np.newaxis])
print(X.shape)
y = np.ones(X.shape[0])
# 准备alpha参数
n_alphas = 200
alphas = np.logspace(-10, -2, n_alphas)
# 对每个alpha进行一次训练,得到对应的回归系数
r_reg = Ridge(fit_intercept=False)  # 只需要创建一个岭回归训练器对象
coefs = []  # 存放
for alp in alphas:r_reg.set_params(alpha=alp)r_reg.fit(X, y)coefs.append(r_reg.coef_)
# 画图
ax = plt.gca()
ax.plot(alphas, coefs)
print(alphas.shape)
# 反转横坐标方向
ax.set_xscale('log')
ax.set_xlim(ax.get_xlim()[::-1])
plt.xlabel('alpha')
plt.ylabel('weigts')
plt.title('Ridge coefficients as a function of the regularization')
plt.show()

在这里插入图片描述


http://chatgpt.dhexx.cn/article/cgaKCklG.shtml

相关文章

【机器学习原理实战01】Ridge回归模型

Ridge回归模型 最近做项目用到岭回归模型,特地来记录一下整个岭回归模型的原理和代码。 以后会将用到的机器学习模型算法都记录下来。1、Ridge 回归原理 多元线性回归计算回归系数的时候回归系数的计算如下: 学过线性代数的都知道,以上式子…

岭回归(Ridge)和Lasso 回归(笔记)

最近在自学图灵教材《Python机器学习基础教程》,在csdn以博客的形式做些笔记。 对于回归问题,线性模型预测的一般公式如下: ŷ w[0] * x[0] w[1] * x[1] … w[p] * x[p] b 这里 x[0] 到 x[p] 表示单个数据点的特征(本例中特…

【机器学习】一文读懂正则化与LASSO回归,Ridge回归

该文已经收录到专题机器学习进阶之路当中,欢迎大家关注。 1.过拟合 当样本特征很多,样本数相对较少时,模型容易陷入过拟合。为了缓解过拟合问题,有两种方法: 方法一:减少特征数量(人工选择重要…

地址总线之寻址原理

译码器将地址总线的数据经过译码后锁定相应的位置,译码器有两种方结构,一种是单译码器,另外一种是双译码器。单译码器适用于存储容量小的应用环境中。双译码器结构将译码器分为两部分一部分是行译码器,另一部分是列译码器。行和列…

[组原]初识-地址总线,地址寄存器,存储单元,存储字长

文章目录 知识点机器字长指令寻址方式按字寻址按字节寻址 存储单元存储字存储字长 💟前记:由一道做错的题总结结果 ⏲ 05.09 知识点 机器字长 计算机进行一次整数运算所能处理的二进制数据的位数;通常也是CPU内部数据通路的宽度;…

地址总线/数据总线/控制总线的作用

数据总线 (1) 是CPU与内存或其他器件之间的数据传送的通道。 (2)数据总线的宽度决定了CPU和外界的数据传送速度。 (3)每条传输线一次只能传输1位二进制数据。eg: 8根数据线一次可传送一个8位二进制数据(…

内存结构、地址总线、数据总线详解

下图为内存的结构图 DB为一个bit,一行DB对应着一个存储单元。 数据总线个数对应着存储单元的位数 数据总线个数 存储单元位数 寄存器位数 如上图所示,内存的结构就是从上到下依次给存储单元编号。 按字节编址 就是每8个bit 对应着一个地址。 读取…

1.8地址总线

现在我们知道,CPU是通过地址总线来指定存储器单元的。可见地址总线上能传送多少个不同的信息,CPU就可以对多少个存储单元进行寻址。 现假设,一个CPU有10根地址总线,让我们来看一下它的寻址情况。我们知道,在电子计算机…

ARM数据/地址总线架构简析

ARM架构简析 1,ARM概述 现在大家讲的ARM的概念实际上是很模糊的,他可能指的是一类芯片,或者指的是ARM公司,亦或者是精简指令集,还是千万人手中的饭碗。下面引用一段关于百度百科关于ARM的准确描述 ARM架构&#xff0…

什么是前端总线,后端总线,内部总线、系统总线,外部总线,地址总线,数据总线,控制总线

文章 部分内容来自于 电子发烧友 内部总线、系统总线和外部总线汇总 部分内容来自于 知乎 前端总线,系统总线,内部总线,外部总线 本文是在两篇文章的基础上进行了二次加工,对两篇文章的精华内容进行了提炼,删掉了对理解…

地址总线是单向还是双向_「计算机组成原理」:总线、地址总线、数据总线和控制总线...

总线(Bus):是计算机各种功能部件之间传送信息的公共通信干线. 总线(Bus):是计算机各种功能部件之间传送信息的公共通信干线,它是由导线组成的传输线束, 按照计算机所传输的信息种类,计算机的总线可以划分为数据总线、地址总线和控制总线,分别用来传输数据、数据地址和控制…

计算机控制总线传输的是,总线,地址总线,数据总线和控制总线

总线(Bus): 这是一条通用的通信干线,可以在计算机的各种功能组件之间传输信息. 它是由电线组成的变速箱线束. 根据计算机传输的信息类型,计算机的总线可以分为数据总线和地址. 总线和控制总线分别用于传输数据,数据地址和控制信号. 总线是一种…

计算机64位地址总线,地址总线与数据总线的关系,功能和宽度

1. 地址总线与数据总线之间的关系 数据总线用于传输数据. 每条数据线传输一个二进制位64位处理器 数据总线,而8条线恰好传输一个字节. 但是,地址总线传输地址,每个地址也传输一个二进制位,而8条地址线传输8个二进制位. 这8个二进制位具有2 ^ 8个不同的变化,因此它们可用于…

地址总线

现在我们知道,CPU是通过地址总线来指定存储器单元的。可见地址总线上能传送多少个不同的信息,CPU就可以对多少个存储单元进行寻址。 现假设,一个CPU有10根地址总线,让我们来看一下它的寻址情况。我们知道,在电子计算机…

地址总线、物理地址、虚拟地址讲解

什么是地址总线? 地址总线(Address Bus ;又称位址总线)属于一种电脑总线(一部份),是由CPU或有DMA能力的单元,用来沟通这些单元想要存取(读取/写入)电脑内存元件/地方的实体位址。 换而言之,就…

计算机总线详解(数据总线、地址总线、控制总线)

文章目录 1 概述2 总线分类2.1 数据总线 Data Bus2.2 地址总线 Address Bus2.3 控制总线 Control Bus 3 扩展3.1 常考题3.2 百度百科 - 总线 Bus 1 概述 总线(Bus) 是计算机各种功能部件之间传送信息的 公共通信干线如果说 主板(Mother Boar…

总线之地址总线、数据总线、控制总线

https://www.cnblogs.com/codexlx/p/13252705.html 1.地址总线: CPU是通过地址总线来指定存储单元的,因此总线地址上能传送多少个不同的信息,CPU就可以对多少个存储单元进行寻址 一个CPU有N根地址线,那么可以说这个CPU的地址总线…

CentOS8 arm64架构 鲲鹏服务器上安装zabbix-agent

1、使用系统yum源中自带的资源安装 查看yum中自带的zabbix资源包 sudo yum list |grep zabbix安装 sudo install zabbix40-agent.aarch64 # 填写自己服务器上的资源2、下载资源包安装 获取官网下载地址 zabbix官网下载.aarch64.rpm的资源包,地址 搜索需要的包 …

ARM64(aarch64)下安装tensorflow

首先从Github下载安装包: tensorflow-on-arm 选择合适的版本,例如tensorflow-1.14.0-cp35-none-linux_aarch64.whl 命名规则:cp35代表python3.5,aarch64表示架构信息 wget https://github.com/lhelontra/tensorflow-on-arm/rele…

QEMU启动ARM64 Linux内核

目录 前言前置知识virt开发板ARM处理器家族简介 安装qemu-system-aarch64安装交叉编译工具交叉编译ARM64 Linux内核交叉编译ARM64 Busybox使用busybox制作initramfs使用QEMU启动ARM64 Linux内核 前言 本文介绍采用 qemu 模拟ARM-64bit开发板(针对ARM-32bit的有另一…