利用python实现Ridge岭回归和Lasso回归

article/2025/9/16 21:48:28

正则化

regularization

在介绍Ridge和Lasso回归之前,我们先了解一下正则化

过拟合和欠拟合

(1) under fit:还没有拟合到位,训练集和测试集的准确率都还没有到达最高。学的还不 到位。

(2) over fit:拟合过度,训练集的准确率升高的同时,测试集的准确率反而降低。学的过 度了,做过的卷子都能再次答对,考试碰到新的没见过的题就考不好。

(3) just right:过拟合前训练集和测试集准确率都达到最高时刻。学习并不需要花费很多 时间,理解的很好,考试的时候可以很好的把知识举一反三。真正工作中我们是奔着过 拟合的状态去调的,但是最后要的模型肯定是没有过拟合的。

正则化就是防止过拟合,增加模型的鲁棒性 robust,鲁棒是 Robust 的音译,也就是 强壮的意思。就像计算机软件在面临攻击、网络过载等情况下能够不死机不崩溃,这就是该 软件的鲁棒性。鲁棒性调优就是让模型拥有更好的鲁棒性,也就是让模型的泛化能力和推广 能力更加的强大。举以下例子:下面两个式子描述同一条直线那个更好?

         第一个更好,因为下面的公式是上面的十倍,当 w 越小公式的容错的能力就越好。因 为把测试集带入公式中如果测试集原来是 100 在带入的时候发生了一些偏差,比如说变成 了 101,第二个模型结果就会比第一个模型结果的偏差大的多。公式中 y w x T = ^ 当 x 有一点 错误,这个错误会通过 w 放大从而影响 z。但是 w 不能太小,当 w 太小时正确率就无法保 证,就没法做分类。想要有一定的容错率又要保证正确率就要由正则项来决定。

         所以正则化(鲁棒性调优)的本质就是牺牲模型在训练集上的正确率来提高推广能力, W 在数值上越小越好,这样能抵抗数值的扰动。同时为了保证模型的正确率 W 又不能极小。 故而人们将原来的损失函数加上一个惩罚项,这里面损失函数就是原来固有的损失函数,比 如回归的话通常是 MSE,分类的话通常是 cross entropy 交叉熵,然后在加上一部分惩罚 项来使得计算出来的模型 W 相对小一些来带来泛化能力。

       常用的惩罚项有 L1 正则项或者 L2 正则项:

        其实 L1 和 L2 正则的公式数学里面的意义就是范数,代表空间中向量到原点的距离。

        当我们把多元线性回归损失函数加上 L2 正则的时候,就诞生了 Ridge 岭回归。当我们 把多元线性回归损失函数加上 L1 正则的时候,就孕育出来了 Lasso 回归。其实 L1 和 L2 正 则项惩罚项可以加到任何算法的损失函数上面去提高计算出来模型的泛化能力的。

Ridge 回归

代码实现

# 同样从 sklearn.linear_model 下导入
import numpy as np
from sklearn.linear_model import Ridge# 创建 X,y 数据
X = 2*np.random.rand(100, 1)
y = 4 + 3*X + np.random.randn(100, 1)# 调用模型
ridge_reg = Ridge(alpha=0.4, solver='sag')
ridge_reg.fit(X, y)
print(ridge_reg.predict([[1.5]]))  # 带入数据进行结果预测
print(ridge_reg.intercept_)  # 截距
print(ridge_reg.coef_)   # 系数
[[8.6487326]]
[4.11689518]
[[3.02122495]]

这里 alpha 设置为 0.4 对应的就是公式中的α正则项系数,solver=’sag’就是使用随机梯 度下降法来求解最优解

源码解析

alpha:正则项系数

fit_intercept:是否计算 W0 截距项

normalize:是否做归一化

max_iter:最大迭代次数

solver:优化算法的选择 

使用SGDRegressor实现同样的算法

# 同样从 sklearn.linear_model 下导入
import numpy as np
from sklearn.linear_model import SGDRegressor# 创建 X,y 数据
X = 2*np.random.rand(100, 1)
y = 4 + 3*X + np.random.randn(100, 1)# 调用模型
sgd_reg = SGDRegressor(penalty='l2', max_iter=10000)
sgd_reg.fit(X, y.reshape(-1,))
print(sgd_reg.predict([[1.5]]))
print(sgd_reg.intercept_)
print(sgd_reg.coef_)
[8.45801805]
[3.5372549]
[3.28050876]

Lasso 回归

代码实现

import numpy as np
from sklearn.linear_model import Lasso
# 创建数据集
X = 2*np.random.rand(100, 1)
y = 4 + 3*X + np.random.randn(100, 1)
# 调用模型
lasso_reg = Lasso(alpha=0.01, max_iter=30000)
lasso_reg.fit(X, y)
# 打印结果
print(lasso_reg.predict([[1.5]]))  # 带入数据进行预测
print(lasso_reg.intercept_)  # 截距
print(lasso_reg.coef_)  # 系数
[8.46496349]
[3.93328286]
[3.02112042]

使用SGDRegressor实现同样的算法

import numpy as np
from sklearn.linear_model import Lasso
from sklearn.linear_model import SGDRegressorX = 2*np.random.rand(100, 1)
y = 4 + 3*X + np.random.randn(100, 1)sgd_reg = SGDRegressor(penalty='l1', max_iter=10000)
sgd_reg.fit(X, y.ravel())
print(sgd_reg.predict([[1.5]]))
print(sgd_reg.intercept_)
print(sgd_reg.coef_)
[8.4622419]
[3.62090517]
[3.22755782]

这里 ravel()操作是扁平化

eg:


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

相关文章

数学推导+纯Python实现机器学习算法14:Ridge岭回归

点击上方“小白学视觉”,选择加"星标"或“置顶” 重磅干货,第一时间送达 上一节我们讲到预防过拟合方法的Lasso回归模型,也就是基于L1正则化的线性回归。本讲我们继续来看基于L2正则化的线性回归模型。 L2正则化 相较于L0和L1&…

【机器学习】多项式回归案例五:正则惩罚解决过拟合(Ridge回归和Lasso回归)

正则惩罚解决过拟合(Ridge回归和Lasso回归) 案例五: 正则惩罚解决过拟合(Ridge回归和Lasso回归)3.2.1 模块加载与数据读入3.2.2 特征工程3.2.3 模型搭建与应用 手动反爬虫,禁止转载: 原博地址 …

07- 梯度下降优化(Lasso/Ridge/ElasticNet) (数据处理+算法)

归一化: 减少数据不同数量级对预测的影响, 主要是将数据不同属性的数据都降到一个数量级。 最大值最小值归一化:优点是可以把所有数值归一到 0~1 之间,缺点受离群值影响较大。0-均值标准化: 经过处理的数据符合标准正态分布,即均值为0,标准差…

Linear Regression:Ridge regression

Ridge regression:岭回归 与least-squares method (最小二乘法)相似,只是加了一个对输入数据权重的惩罚值, 这个惩罚参数称为regularization (正则化)。正则化降低模型的复杂度,防止模型的过度拟合。 Ridge regression 利用L2 regularizatio…

对Lasso可以做特征选择,而Ridge却不行的详细解释

为了限制模型参数的数值大小,就在模型原来的目标函数上加上一个惩罚项,这个过程叫做正则化(Regularization)。 如果惩罚项是参数的 l 2 l_2 l2​范数,就是岭回归(Ridge Regression)如果惩罚项是参数的 l 1 l_1 l1​范…

Kernel Ridge Regression 详解过程

Kernel Ridge Regression(KRR,核脊回归) 是Ridge Regression(RR,脊回归)的kernel版本,与Support Vector Regression(SVR,支持向量回归)类似。所以,在这里,我们先大致了解RR的来源,由此引入KRR&a…

sklearn-1.1.2.Ridge Regression

1.1.2 Ridge Regression Ridge回归通过对系数的惩罚值来解决最小二乘法的系数问题。岭系数的最小化惩罚残差平方和的公式: 这里,是用来控制收缩量的复杂参数:参数值越大,收缩量也越大,因此系数对共线性变得更加稳健。 …

Ridge回归

岭回归(英文名:ridge regression, Tikhonov regularization)是一种专用于共线性数据分析的有偏估计回归方法,自变量之间线性相关-correlation很高,实质上是一种改良的最小二乘估计法,通过放弃最小二乘法的无偏性,以损失…

Lasso 和 Ridge回归中的超参数调整技巧

在这篇文章中,我们将首先看看Lasso和Ridge回归中一些常见的错误,然后我将描述我通常采取的步骤来优化超参数。代码是用Python编写的,我们主要依赖scikit-learn。本文章主要关注Lasso的例子,但其基本理论与Ridge非常相似。 起初&a…

Ridge和Lasso回归

上周看了看回归方面的知识,顺便复(xue)习一下Ridge(岭回归)和Lasso回归(套索回归)。瞅到了一篇英文博客讲得不错,翻译一下 本文翻译自 Ridge and Lasso Regression 本文是一篇Josh …

Ridge回归*

线性回归稍微总结一下: 常见有普通线性回归(没有正则项,目标是最小化均方误差)、LASSO(均方误差项l-1正则项)、Ridge回归(均方误差l-2正则项) 加上正则项可以降低过拟合风险。 Ridge…

【机器学习原理实战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…