多元线性回归改进RidgeLasso

article/2025/9/16 21:24:38

多元线性回归改进 – 潘登同学的Machine Learning笔记

文章目录

  • 多元线性回归改进 -- 潘登同学的Machine Learning笔记
    • (简单回顾)多元线性回归模型
    • 归一化normalization
      • 归一化的方法
      • 来个小例子试一试?
    • 正则化regularization
      • 正则项
    • Lasso回归 和 Ridge岭回归
      • L1稀疏L2平滑
      • L1稀疏的应用--特征选择
      • Lasso与Ridge例子
    • L1和L2正则项同时作用 -- ElasticNet
      • ElasticNet例子

(简单回顾)多元线性回归模型

  • 总目标:预测

  • 模型:
    y = β 0 + β 1 x 1 + ⋯ + β k x k y = \beta_0 + \beta_1x_1 + \cdots + \beta_kx_k y=β0+β1x1++βkxk

  • 优化目标:MSE
    L o s s = ∑ n = 1 m e r r o r 2 = ∑ n = 1 m ( y ^ − y ) 2 Loss = \sum_{n=1}^{m} error^{2} = \sum_{n=1}^{m} (\hat{y} - y)^{2} Loss=n=1merror2=n=1m(y^y)2

  • 优化方法:梯度下降法
    θ j t + 1 = θ j t − η ∙ g r a d i e n t j \theta_j^{t+1} = \theta_j^{t} - \eta \bullet gradient_j θjt+1=θjtηgradientj

归一化normalization

在这里插入图片描述

  • 一个问题:

如果现在多元线性回归中有两个x, 分别代表 x 1 x_1 x1土地价格和 x 2 x_2 x2中长期贷款利率, y表示房价水平;我们知道利率水平都是以5.1%这样的百分数形式出现的, 而土地价格动辄百万;

根据经济学的直觉, 在多元线性回归中 θ 1 \theta_1 θ1肯定要比 θ 2 \theta_2 θ2小得多, 不然因为 x 1 x_1 x1的量级远超过 x 2 x_2 x2,房价就由土地价格完全决定了;

再看回我们的梯度下降算法:
θ j t + 1 = θ j t − η ∙ g r a d i e n t j g j = ( θ T X − Y ) x j \begin{aligned} \theta_j^{t+1} &= \theta_j^{t} - \eta \bullet gradient_j \\ g_j &= (\theta^{T}X - Y)x_j\\ \end{aligned} θjt+1gj=θjtηgradientj=(θTXY)xj

仔细揣摩上式,可以发现梯度下降法其实是受两个因素影响的:

  • θ \theta θ θ ^ \hat{\theta} θ^的距离, 也就是距要求的 θ \theta θ的距离;
  • g r a d i e n t gradient gradient的大小;

可以观察到 g j g_j gj的大小其实是收到 x j x_j xj影响的, 而量纲大的土地价格 g r a d i e n t 1 gradient_1 gradient1就会大, 走的就快;而碰巧量纲大的 θ 1 \theta_1 θ1又比较小, 假设起点都是0, 在这两个因素的共同作用下, θ 1 \theta_1 θ1能更快的收敛;

所以我们需要消除量纲, 消除量纲这种事情其实在数据统计分析里面也经常做, 目的其实差不太多,我们只是用梯度下降的视角去解释了一下;

归一化的方法

  • 最大值最小值归一化
    X i , j ∗ = X i , j − X j m i n X j m a x − X j m i n X_{i,j}^{*} = \frac{X_{i,j}-X_j^{min}}{X_j^{max}-X_j^{min}} Xi,j=XjmaxXjminXi,jXjmin
    注意:如果数据中有离群值, 即一个很大的 X k 1 X_{k1} Xk1那么整列 X 1 X_1 X1数据都会变得非常接近0,而只有一个1, 这样数据就失去了意义, 这种方法不好;

  • 标准归一化
    X i , j ∗ = X i , j − X j m e a n X j s t d X_{i,j}^{*} = \frac{X_{i,j}-X_j^{mean}}{X_j^{std}} Xi,j=XjstdXi,jXjmean
    注意:标准归一化并不能将数据缩放到0-1之间, 但是他能显著增加梯度下降法的速度;

回到梯度下降法

( θ 0 t + 1 θ 1 t + 1 θ 2 t + 1 ) = ( θ 0 t θ 1 t θ 2 t ) − η ( θ T X − Y ) ( X 0 X 1 X 2 ) {\begin{pmatrix} \theta_0^{t+1} \\ \theta_1^{t+1} \\ \theta_2^{t+1} \\ \end{pmatrix}} = {\begin{pmatrix} \theta_0^{t} \\ \theta_1^{t} \\ \theta_2^{t} \\ \end{pmatrix}}- \eta (\theta^{T}X - Y) {\begin{pmatrix} X_0 \\ X_1 \\ X_2 \\ \end{pmatrix}} θ0t+1θ1t+1θ2t+1=θ0tθ1tθ2tη(θTXY)X0X1X2
考虑下面的情形:

对所有的 θ \theta θ而言, η ( θ T X − Y ) \eta (\theta^{T}X - Y) η(θTXY)是共用的, 要是所有的数据维度,都是正数的话, 那么 θ \theta θ在每一次梯度下降中更新的方向都是一样的(同增同减)

像下图所示,要想从 wt 更新到 w* 就必然要么 W1 和 W2 同时变大再同时变小,或者就 W1 和 W2 同时变小再同时变大。不能走蓝色的最优解路径,即 W1 变小的时候 W2 变大。(机器学习中的模型其实就是参数, 说训练模型,其实就是调整参数, 参数用 θ \theta θ或W来表示都可以)

在这里插入图片描述

  • 问题:怎么能让 W1 变小的时候 W2 变大呢?

改变数据的符号就可以啦!让X中的数有正有负就能实现蓝色路径这样的;而标准归一化减去均值的操作就能到达目的!!!

来个小例子试一试?

#%%归一化
from sklearn.preprocessing import MinMaxScaler,StandardScaler
import numpy as np
scaler = MinMaxScaler()
temp = np.arange(5)
print('最大值最小值归一化...')
print(scaler.fit_transform(temp.reshape(-1,1)))  #先摆成列再做归一化scaler1 = StandardScaler()
print('均值归一化...')
print(scaler1.fit_transform(temp.reshape(-1,1)))
# 打印结果
print('均值为:', scaler1.mean_)
print('标准差为:',scaler1.var_)

正则化regularization

  • 过拟合和欠拟合

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

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

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

如下图, (1)表示欠拟合, (2)表示过拟合, (3)表示刚刚好:

在这里插入图片描述

  • 鲁棒性Robust

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

而对于MLR模型来说, 当X有波动的时候, 对于预测结果并没有什么影响, 那这个模型的鲁棒性就比较好了;

所以正则化(鲁棒性调优)的本质就是牺牲模型在训练集上的正确率来提高推广能力, θ \theta θ 在数值上越小越好,这样能抵抗数值的扰动。同时为了保证模型的正确率 θ \theta θ 又不能极小。 故而人们将原来的损失函数加上一个惩罚项;

正则项

  • L1正则项
    L 1 = ∑ i = 1 m ∣ θ i ∣ L_1 = \sum_{i=1}^{m} \left\vert \theta_i \right\vert L1=i=1mθi
  • L2正则项
    L 2 = ∑ i = 1 m θ i 2 L_2 = \sum_{i=1}^{m} \theta_i^2 L2=i=1mθi2

正则项其实就是范数, 代表代表空间中向量到原点的距离;并非所有距离都像我们几何中的距离, 只有欧氏空间的距离度量是用平方和开根来计算; L1范数就是曼哈顿距离, 如下图,绿色的就是欧式距离,其他都是曼哈都距离:

曼哈顿距离

Lasso回归 和 Ridge岭回归

在原有的多元线性回归的Loss后加上一个L1正则项后,就产生Lasso回归

在原有的多元线性回归的Loss后加上一个L2正则项后,就产生Ridge岭回归

在这里插入图片描述

L1稀疏L2平滑

通常我们会说 L1 正则会使得计算出来的模型有的 θ \theta θ 趋近于 0,有的 θ \theta θ 相对较大,而 L2 会使得 θ \theta θ 参数整体变小,这是为什么呢?

  • 从梯度下降法考虑
    • Lasso回归

      Loss函数:
      L o s s L a s s o = ∑ i = 1 m ( y ^ − y ) 2 + λ ∑ i = 1 n ∣ θ i ∣ Loss_{Lasso} = \sum_{i=1}^{m} (\hat{y} - y)^{2} + \lambda \sum_{i=1}^{n} \left\vert \theta_i \right\vert LossLasso=i=1m(y^y)2+λi=1nθi
      梯度:
      g j R i d g e = ( θ T X − Y ) x j ± λ g_j^{Ridge} = (\theta^{T}X - Y)x_j \pm \lambda gjRidge=(θTXY)xj±λ

    • Ridge岭回归

      Loss函数:
      L o s s R i d g e = ∑ i = 1 m ( y ^ − y ) 2 + λ 2 ∑ i = 1 n θ i 2 Loss_{Ridge} = \sum_{i=1}^{m} (\hat{y} - y)^{2} + \frac{\lambda}{2} \sum_{i=1}^{n} \theta_i^2 LossRidge=i=1m(y^y)2+2λi=1nθi2
      梯度:
      g j R i d g e = ( θ T X − Y ) x j + λ θ i g_j^{Ridge} = (\theta^{T}X - Y)x_j + \lambda \theta_i gjRidge=(θTXY)xj+λθi

我们可以看到是 L1 每次会多走 η \eta η的幅度,我们知道 η \eta η学习率一开始设置一个常数,学习率是 0.5 的话,比如 θ 1 \theta_1 θ1 多走 0.5, θ 2 \theta_2 θ2 也是多走 0.5,反观 L2 每次多走的幅度是之前的 2 倍的 θ i t \theta_i^t θit,学习率是 0.5 的话,那么就 θ 1 \theta_1 θ1就多走 θ 1 t \theta_1^t θ1t, θ 2 \theta_2 θ2 就多走 θ 2 t \theta_2^t θ2t;

观察上图, 红色区域其实是正则项本身的一个函数等高线图, 而紫色区域是原Loss的等高线图,要使他们的之和最小的 θ \theta θ就是他们的交点处(细品, 把这两个函数当作三维图的话,他俩一叠加,最小值就出现在交点处)

而对于L1,交点常会出现在坐标轴上, 而L2会使得 θ \theta θ都减小

  • 深入理解L1稀疏L2平滑

接着上图, 对于原本Loss的最小点(紫色点), 加上正则项,他就得往原点附近靠;

而根据Lasso的导数, θ \theta θ的移动步长都一样(即 θ 1 \theta_1 θ1向左走一单位, 那 θ 2 \theta_2 θ2也会向下走一单位), 这样一走容易走到坐标轴上(如果提前与方形区域相交, 就不会在坐标轴上)

但对于Ridge岭回归来说, 当 θ 1 \theta_1 θ1越接近0的时候,它走的就越慢, 就相当于在等待 θ 2 \theta_2 θ2接近0, 所以L2与L2等高线相交的位置一般不会是坐标轴;

L1稀疏的应用–特征选择

因为L1稀疏, 有一些 θ j \theta_j θj会变为0, 就意味着这些属性的数据其实是没啥意义的, 就可以帮助我们筛掉一些特征, 减少计算量, 让我们专注在重要特征的处理上;

Lasso与Ridge例子

  • Ridge(L2)
#%%ridge_regression岭回归(l2)
import numpy as np
from sklearn.linear_model import Ridgenp.random.seed(2)
x = 2*np.random.rand(100,1)
#观察值         误差(服从正态分布)
y = 5 + 4*x + np.random.randn(100,1)reg = Ridge(alpha = 0.4,solver = 'sag')  #sag表示随机梯度下降
reg.fit(x,y)   #这里的x不用传截距项
print(reg.predict([[2]]))  #这里预测值一定要是矩阵形式(二维数组)
print(reg.intercept_)
print(reg.coef_)

可以尝试修改一下alpha参数, alpha越大就表明越看重模型的泛化能力, 当alpha设置为0时, 就相当于普通的多元线性回归, 如果设置为0, 跑一把模型, 会显示Coordinate descent with no regularization may lead to unexpected results and is discouraged.其实就是说没设置正则项;

  • Lasso(L1)
#%%lasso regression(L1正则项)
import numpy as np
from sklearn.linear_model import Lassonp.random.seed(2)
x = 2*np.random.rand(100,1)
#观察值         误差(服从正态分布)
y = 5 + 4*x + np.random.randn(100,1)reg = Lasso(alpha = 0.4,max_iter=1000000)  #这里无需传入梯度下降的方法 max_iter表示迭代次数
reg.fit(x,y)   #这里的x不用传截距项
print(reg.predict([[2]]))  #这里预测值一定要是矩阵形式(二维数组)
print(reg.intercept_)
print(reg.coef_)

L1和L2正则项同时作用 – ElasticNet

ElasticNet就是把Loss同时加上了L1正则和L2正则,没啥特别的
L o s s E l a s t i c N e t = ∑ i = 1 m ( y ^ − y ) 2 + λ ρ ∑ i = 1 n ∣ θ i ∣ + λ ( 1 − ρ ) 2 ∑ i = 1 n θ i 2 Loss_{ElasticNet} = \sum_{i=1}^{m} (\hat{y} - y)^{2} + \lambda \rho \sum_{i=1}^{n} \left\vert \theta_i \right\vert+\frac{\lambda(1-\rho)}{2} \sum_{i=1}^{n} \theta_i^2 LossElasticNet=i=1m(y^y)2+λρi=1nθi+2λ(1ρ)i=1nθi2

ElasticNet例子

#%%ElasticNet (既使用L1,也使用L2)
import numpy as np
from sklearn.linear_model import ElasticNetnp.random.seed(2)
x = 2*np.random.rand(100,1)
#观察值         误差(服从正态分布)
y = 5 + 4*x + np.random.randn(100,1)reg = ElasticNet(alpha = 0.4,l1_ratio = 0.5,max_iter=1000000)  #这里无需传入梯度下降的方法 max_iter表示迭代次数
reg.fit(x,y)   #这里的x不用传截距项
print(reg.predict([[2]]))  #这里预测值一定要是矩阵形式(二维数组)
print(reg.intercept_)
print(reg.coef_)

多元线性回归的改进Ridge和Lasso就是这样了, 继续下一章吧!pd的Machine Learning


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

相关文章

岭回归(Ridge)不同alpha值对归回结果的影响

对于有些矩阵,矩阵中某个元素的一个很小的变动,会引起最后计算结果误差很大,这种矩阵称为“病态矩阵”。有些时候不正确的计算方法也会使一个正常的矩阵在运算中表现出病态。对于高斯消去法来说,如果主元(即对角线上的…

r ridge回归_手把手带你画高大上的lasso回归模型图

各位芝士好友,今天我们来聊一聊lasso回归算法。与预后有关的文章,传统的做法一般会选择多变量cox回归,高级做法自然就是我们今天的lasso分析。 首先我们先来几篇文献,看一下lasso最近发的两篇文章,如下: 这…

机器学习算法系列(四)- 岭回归算法(Ridge Regression Algorithm)

阅读本文需要的背景知识点:标准线性回归算法、一丢丢编程知识 一、引言 前面一节我们学习了机器学习算法系列(三)- 标准线性回归算法(Standard Linear Regression Algorithm),最后求得标准线性回归的代价函…

手写算法-python代码实现Ridge(L2正则项)回归

手写算法-python代码实现Ridge回归 Ridge简介Ridge回归分析与python代码实现方法一:梯度下降法求解Ridge回归参数方法二:标准方程法实现Ridge回归调用sklearn对比 Ridge简介 前面2篇文章,我们介绍了过拟合与正则化,比较全面的讲了…

线性模型-Ridge-Lasso-回归

目录 1 基本库导入2 线性回归2.1 线性模型性能2.2 使用更高维的数据集 3 岭回归-Ridge3.1 Ridge原理及应用3.2 Ridge调参3.3 为什么要用Ridge 4 Lasso4.1 基本原理及应用4.2 Lasso调参4.3 为什么要用Lasso4.4 Lasso和Ridge的区别(L1,L2区别) …

利用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.过拟合 当样本特征很多,样本数相对较少时,模型容易陷入过拟合。为了缓解过拟合问题,有两种方法: 方法一:减少特征数量(人工选择重要…