线性模型-Ridge-Lasso-回归

article/2025/9/16 21:47:00

目录

  • 1 基本库导入
  • 2 线性回归
    • 2.1 线性模型性能
    • 2.2 使用更高维的数据集
  • 3 岭回归-Ridge
    • 3.1 Ridge原理及应用
    • 3.2 Ridge调参
    • 3.3 为什么要用Ridge
  • 4 Lasso
    • 4.1 基本原理及应用
    • 4.2 Lasso调参
    • 4.3 为什么要用Lasso
    • 4.4 Lasso和Ridge的区别(L1,L2区别)
  • 5 相关概念
    • 5.1 模型偏差-模型方差
    • 5.2 多重共线性相关
      • 5.2.1 概念
      • 5.2.2 影响
      • 5.5.3 排除方法

1 基本库导入

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import mglearn

对于回归问题,线性模型预测的一般公式如下:
一般公式
下列代码可以在一维 wave 数据集上学习参数 w [0] 和 b :

mglearn.plots.plot_linear_regression_wave()

2 线性回归

线性回归,或者普通最小二乘法 (ordinary least squares,OLS), 是回归问题最简单也最经典的线性方法。线性回归寻找参数 w 和 b ,使得对训练集的预测值与真实的回归目标值 y 之间的均方误差最小。均方误差(mean squared error)是预测值与真实值之差的平方和除以样本数。线性回归没有参数,这是一个优点,但也因此无法控制模型的复杂度

from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split# 数据集划分
X, y = mglearn.datasets.make_wave(n_samples = 60)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state = 1)# 训练模型
lr = LinearRegression().fit(X_train, y_train)

“斜率”参数(w,也叫作权重或系数 )被保存在 coef_ 属性中,而偏移或截距(b )被保存在 intercept_ 属性中。(coef_ 和 intercept_ 结尾处奇怪的下 划线。scikit-learn总是将从训练数据中得出的值保存在以下划线结尾的属性中。这是为了将其与用户设置的参数区分开)

lr.coef_
[out]: array([0.42056163])
lr.intercept_
[out]: -0.043819629242883185

2.1 线性模型性能

# 这个地方输出的是R^2
lr.score(X_train, y_train)
[out]: 0.6785798741099218
lr.score(X_test, y_test)
[out]: 0.623410671552743

R2 约为 0.66,这个结果不是很好,但我们可以看到,训练集和测试集上的分数非常接近。这说明可能存在欠拟合,而不是过拟合。 对于这个一维数据集来说,过拟合的风险很小,因为模型非常简单 (或受限)。然而,对于更高维的数据集(即有大量特征的数据集),线性模型将变得更加强大,过拟合的可能性也会变大。

2.2 使用更高维的数据集

X, y = mglearn.datasets.load_extended_boston()
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state = 1)lr = LinearRegression().fit(X_train, y_train)
lr.score(X_train, y_train)
[out]: 0.9281262443260945
lr.score(X_test, y_test)
[out]: 0.8962092351509625

若性能差异过大,则说明存在过拟合;若结果差异不大,但是性能不佳,则可能是欠拟合。

3 岭回归-Ridge

3.1 Ridge原理及应用

岭回归也是一种用于回归的线性模型,因此它的预测公式与普通最小二乘法相同。但在岭回归中,对系数(w)的选择不仅要在训练数据上得到好的预测结果,而且还要拟合附加约束。**我们还希望系数尽量小。换句话说,w 的所有元素都应接近于 0。**直观上来看, 这意味着每个特征对输出的影响应尽可能小(即斜率很小),同时仍给出很好的预测结果。这种约束是所谓正则化(regularization)的一个例子。正则化是指对模型做显式约束,以避免过拟合。岭回归用到的这种被称为 L2 正则化

通常岭回归方程的R平方值会稍低于普通回归分析,但回归系数的显著性往往明显高于普通回归,在存在共线性问题病态数据偏多的研究中有较大的实用价值。

from sklearn.linear_model import Ridgeridge = Ridge().fit(X_train, y_train)
print(f'Train set score: {ridge.score(X_train, y_train)}')
print(f'Test set score: {ridge.score(X_test, y_test)}')
print(f'The number of feature: {np.sum(ridge.coef_ != 0)}')
[out]: 
Train set score: 0.8406599011793962
Test set score: 0.8836280810371685
The number of feature: 10

Ridge 是一种约束更强的模型,所以更不容易过拟合。复杂度更小的模型意味着在训练集上的性能更差,但泛化性能更好。

3.2 Ridge调参

Ridge 模型在模型的简单性(系数都接近于 0)与训练集性能之间做出权衡。简单性和训练集性能二者对于模型的重要程度可以由用户通过设置 alpha参数来指定。在前面的例子中,我们用的是默认参数 alpha=1.0。但没有理由认为这会给出最佳权衡。alpha的最佳设定值取决于用到的具体数据集。增大alpha会使得系数更加趋向于0,从而降低训练集性能,但可能会提高泛化性能。

ridge10 = Ridge(alpha = 10).fit(X_train, y_train)
ridge01 = Ridge(alpha = 0.1).fit(X_train, y_train)
plt.plot(ridge.coef_, 's', label = 'Ridge alpha=1')
plt.plot(ridge10.coef_, 's', label = 'Ridge alpha=10')
plt.plot(ridge01.coef_, 's', label = 'Ridge alpha=0.1')plt.plot(lr.coef_, 'o', label = 'LinearRegression')
plt.xlabel('Coefficient index')
plt.ylabel('Coefficient magnitude')
plt.hlines(0, 0, len(lr.coef_))
plt.ylim(-25, 25)
plt.legend()
plt.show()

ridge对比

mglearn.plots.plot_ridge_n_samples()

学习曲线
如果有足够多的训练数据,正则化变得不那么重要,并且岭回归和线性回归将具有相同的性能。(在这个例子中,二者相同恰好 发生在整个数据集的情况下,这只是一个巧合)

3.3 为什么要用Ridge

总的来说,Ridge是使用是为了减少共线性的影响。
标准线性或多项式回归在特征变量之间存在很高的共线性(high collinearity)的情况下将失败。

我们进行回归分析需要了解每个自变量对因变量的单纯效应,高共线性就是说自变量间存在某种函数关系,如果你的两个自变量间(X1和X2)存在函数关系,那么X1改变一个单位时,X2也会相应地改变,此时你无法做到固定其他条件,单独考查X1对因变量Y的作用,你所观察到的X1的效应总是混杂了X2的作用,这就造成了分析误差,使得对自变量效应的分析不准确,所以做回归分析时需要排除高共线性的影响。

高共线性的存在可以通过几种不同的方式来确定:

  1. 尽管从理论上讲,该变量应该与Y高度相关,但回归系数并不显著。
  2. 添加或删除X特征变量时,回归系数会发生显着变化。
  3. X特征变量具有较高的成对相关性(pairwise correlations)(检查相关矩阵)。

标准线性回归的优化函数:在这里插入图片描述
为了缓解这个问题,岭回归为变量增加了一个小的平方偏差因子(其实也就是正则项):
在这里插入图片描述
这种平方偏差因子向模型中引入少量偏差,但大大减少了方差。

岭回归的几个要点:

  1. 这种回归的假设与最小平方回归相同,不同点在于最小平方回归的时候,我们假设数据的误差服从高斯分布使用的是极大似然估计(MLE),在岭回归的时候,由于添加了偏差因子,即w的先验信息,使用的是**极大后验估计(MAP)**来得到最终参数的。
  2. 它缩小了系数的值,但没有达到零,这表明没有特征选择功能。

4 Lasso

4.1 基本原理及应用

Lasso使用L1 正则化。L1 正则化的结果是,使用 lasso 时某些系数刚好为 0 。这说明某些特征被模型完全忽略。这可以看作是一种自动化的特征选择某些系数刚好为 0,这样模型更容易解释,也可以呈现模型最重要的特征。

from sklearn.linear_model import Lassolasso = Lasso().fit(X_train, y_train)
print(f'Train set score: {lasso.score(X_train, y_train)}')
print(f'Test set score: {lasso.score(X_test, y_test)}')
print(f'The number of feature: {np.sum(lasso.coef_ != 0)}')
[out]: 
Train set score: 0.23918238514420065
Test set score: 0.2021552813955192
The number of feature: 3

4.2 Lasso调参

lasso001 = Lasso(alpha = 0.01, max_iter = 100000).fit(X_train, y_train)
print(f'Train set score: {lasso001.score(X_train, y_train)}')
print(f'Test set score: {lasso001.score(X_test, y_test)}')
print(f'The number of feature: {np.sum(lasso001.coef_ != 0)}')
[out]: 
Train set score: 0.8557184508301234
Test set score: 0.9113857849877524
The number of feature: 36
lasso00001 = Lasso(alpha = 0.0001, max_iter = 100000).fit(X_train, y_train)
print(f'Train set score: {lasso00001.score(X_train, y_train)}')
print(f'Test set score: {lasso00001.score(X_test, y_test)}')
print(f'The number of feature: {np.sum(lasso00001.coef_ != 0)}')
[out]:
Train set score: 0.9272488231017324
Test set score: 0.9001399153473915
The number of feature: 91
plt.plot(lasso.coef_, 's', label = 'Lasso alpha = 1')
plt.plot(lasso001.coef_, '^', label = 'Lasso alpha = 0.01')
plt.plot(lasso00001.coef_, 'v', label = 'Lasso alpha = 0.0001')plt.plot(ridge01.coef_, 'o', label = 'Ridge alpha = 0.1')
plt.legend(ncol = 2, loc = (0, 1.05))
plt.ylim(-25, 25)
plt.xlabel('Coefficient index')
plt.xlabel('Coefficient magnitude')

Lasso对比

4.3 为什么要用Lasso

总的来说,Lasso和Ridge类似,是为了减少共线性的影响,从而减少模型方差。

4.4 Lasso和Ridge的区别(L1,L2区别)

  1. 内置的特征选择(Built-in feature selection):这是L1范数的一个非常有用的属性,而L2范数不具有这种特性。这实际上因为是L1范数倾向于产生稀疏系数。例如,假设模型有100个系数,但其中只有10个系数是非零系数,这实际上是说“其他90个变量对预测目标值没有用处”。 而L2范数产生非稀疏系数,所以没有这个属性。因此,可以说Lasso回归做了一种“参数选择”形式,未被选中的特征变量对整体的权重为0。
  2. 稀疏性:指矩阵(或向量)中只有极少数条目非零。 L1范数具有产生具有零值或具有很少大系数的非常小值的许多系数的属性。
  3. 计算效率L1范数没有解析解,但L2范数有。这使得L2范数的解可以通过计算得到。然而,L1范数的解具有稀疏性,这使得它可以与稀疏算法一起使用,这使得在计算上更有效率。

参考资料:https://mp.weixin.qq.com/s/mr83EK24S94b_UUlecyqlA

5 相关概念

5.1 模型偏差-模型方差

模型的偏差:训练出来的模型在训练集上的准确度。

模型的方差:模型是随机变量。设样本容量为n的训练集为随机变量的集合(X1, X2, …, Xn),那么模型是以这些随机变量为输入的随机变量函数(其本身仍然是随机变量):F(X1, X2, …, Xn)。抽样的随机性带来了模型的随机性。方差越大的模型越容易过拟合

假设有两个训练集A和B,经过A训练的模型Fa与经过B训练的模型Fb差异很大,这意味着Fa在类A的样本集合上有更好的性能,而Fb在类B的训练样本集合上有更好的性能,这样导致在不同的训练集样本的条件下,训练得到的模型的效果差异性很大,很不稳定,这便是模型的过拟合现象。

而对于一些弱模型,它在不同的训练样本集上性能差异并不大,因此模型方差小,抗过拟合能力强,因此boosting算法就是基于弱模型来实现防止过拟合现象。

5.2 多重共线性相关

5.2.1 概念

概念

5.2.2 影响

  1. 完全共线性下参数估计量不存在
  2. 近似共线性下OLS估计精度较低

参数的OLS估计量方差较大,其标准差也就较大,从而是的参数估计量精度较低。

  1. 参数估计量经济含义不合理

我们进行回归分析需要了解每个自变量对因变量的单纯效应,多重共线性就是说自变量间存在某种函数关系,如果你的两个自变量间(X1和X2)存在函数关系,那么X1改变一个单位时,X2也会相应地改变,此时你无法做到固定其他条件,单独考查X1对因变量Y的作用,你所观察到的X1的效应总是混杂了X2的作用,这就造成了分析误差,使得对自变量效应的分析不准确,所以做回归分析时需要排除多重共线性的影响。

  1. 变量的显著性检验失去意义,可能将重要的解释变量排除在模型之外

多重共线性,更容易接受F检验原假设(所有的参数均为0)因为R^2变大了,所以F值变大了。

更容易接受T检验原假设(参数不显著),是因为多重共线性的出现使得估计的参数方差变大,因此T值变小。

  1. 模型的预测功能失效。变大的方差容易使区间预测的“区间”变大,使预测失去意义。
    需要注意:即使出现较高程度的多重共线性,OLS估计量仍具有线性性等良好的统计性质(仍然满足BLUE-最有线性无偏性,best,linear,unbiased,estimator)。但是OLS法在统计推断上无法给出真正有用的信息。

5.5.3 排除方法

  1. 排除引起共线性的变量。找出引起多重共线性的解释变量,将它排除出去,以逐步回归法得到最广泛的应用。
  2. 差分法。时间序列数据、线性模型:将原模型变换为差分模型。(还没看懂???)
  3. 减小参数估计量的方差:岭回归法(Ridge Regression)
  4. 简单相关系数检验法。

参考资料:https://www.cnblogs.com/zongfa/p/9502470.html

参考资料:https://baike.baidu.com/item/%E5%A4%9A%E9%87%8D%E5%85%B1%E7%BA%BF%E6%80%A7/10201978?fr=aladdin


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

相关文章

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

正则化 regularization 在介绍Ridge和Lasso回归之前,我们先了解一下正则化 过拟合和欠拟合 (1) under fit:还没有拟合到位,训练集和测试集的准确率都还没有到达最高。学的还不 到位。 (2) over fit:拟合过度,训练…

数学推导+纯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根地址总线,让我们来看一下它的寻址情况。我们知道,在电子计算机…