岭回归与LASSO回归:解析两大经典线性回归方法

news2024/9/27 9:19:20

文章目录

  • 🍋引言
  • 🍋岭回归(Ridge Regression)
  • 🍋实战---岭回归
  • 🍋LASSO回归(LASSO Regression)
  • 🍋实战---LASSO回归
  • 🍋岭回归和LASSO哪个更容易是直线
  • 🍋岭回归与LASSO回归的应用
  • 🍋L1正则化和L2正则化
  • 🍋偏差和方差

🍋引言

在机器学习和统计建模中,回归分析是一项重要的任务,用于预测一个或多个因变量与一个或多个自变量之间的关系。在这个领域中,有许多回归方法可供选择,其中岭回归和LASSO回归是两种经典的线性回归技术。在本文中,我们将深入探讨这两种方法的原理、应用和优缺点,帮助您更好地理解它们在实际问题中的作用。

🍋岭回归(Ridge Regression)

岭回归,又称L2正则化,是一种用于解决多重共线性问题的线性回归技术。多重共线性是指自变量之间存在高度相关性的情况,这会导致普通最小二乘法(OLS)估计的不稳定性,使得模型的预测性能下降。岭回归通过在损失函数中添加一个正则化项来解决这个问题,其数学表达式如下:在这里插入图片描述

其中, y i y_i yi 是观测值, X i \mathbf{X}_i Xi 是自变量矩阵, β \beta β 是待估计的回归系数, λ \lambda λ 是正则化参数,用于控制正则化的强度。岭回归通过增加 β j \beta_j βj的平方和来限制回归系数的大小,从而减少多重共线性对估计结果的影响。

岭回归的优点包括:

  • 改善多重共线性问题。
  • 稳定的估计结果,不容易受到异常值的影响。
  • 可以处理高维数据集,避免过拟合。

然而,岭回归也有一些缺点,例如它不能自动选择重要的特征,需要手动调整正则化参数 λ \lambda λ,并且可能不适用于稀疏数据集。

🍋实战—岭回归

首先我们假设一组数据

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(666)
x = np.random.uniform(-3,3,size=100)
X = x.reshape(-1,1)
y = 0.5 * x + 3 + np.random.normal(0,1,size=100)

plt.scatter(X,y)
plt.show()

运行结果如下
在这里插入图片描述
接下来我们导入我们需要的一些库

from sklearn.preprocessing import PolynomialFeatures,StandardScaler
from sklearn.pipeline import Pipeline # 管道
from sklearn.linear_model import LinearRegression,Ridge,Lasso # 岭回归和LASSO回归
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

为了方便读者理解,这里我将每个库进行一些说明

  1. sklearn.preprocessing:这个库是scikit-learn(通常被称为sklearn)的一部分,用于数据预处理。其中的PolynomialFeatures类可以用来生成多项式特征,将原始特征转换为高次幂的特征,以帮助模型拟合非线性关系。这对于处理非线性问题非常有用。StandardScaler类用于标准化数据,即将数据进行均值为0、方差为1的缩放,以确保特征在相同的尺度上。

  2. sklearn.pipeline:Pipeline是一种机器学习中用于构建和管理多个数据处理和模型构建步骤的工具。它允许将多个数据处理步骤串联在一起,形成一个连续的流程。在您的代码示例中,Pipeline用于将多项式特征生成、数据标准化和线性回归(或其他回归算法)的步骤组合在一起,使其可以一次性执行。

  3. sklearn.linear_model:这个库包含了各种线性回归模型的实现。这里面提到了LinearRegression、Ridge和Lasso。这些模型用于进行线性回归分析。具体来说,LinearRegression是标准的线性回归模型,Ridge是岭回归模型,Lasso是LASSO回归模型。这些模型用于建立线性关系模型,其中目标是拟合自变量和因变量之间的线性关系,并预测未知数据的因变量值。

  4. sklearn.model_selection:这个库提供了用于模型选择和评估的工具。train_test_split函数用于将数据集分成训练集和测试集,以便训练模型和评估其性能。您可以使用此函数将数据划分为两部分,一部分用于训练模型,另一部分用于评估模型的性能。

  5. sklearn.metrics:这个库包含了各种用于模型性能评估的指标。在您的代码示例中,您提到了mean_squared_error。这是一个用于回归问题的评估指标,用于度量模型的预测值与实际观测值之间的均方误差。均方误差越小,模型的性能越好。

之后我们需要创建一个多项式回归模型管道,管道的创建方式之前有提过,这里就直接展示

def polynomialRegression(degree):
    return Pipeline([
        ('poly',PolynomialFeatures(degree)),
        ('std_scaler',StandardScaler()),
        ('lin_reg',LinearRegression())
    ])

之后我们进行分割数据集并且设置随机种子

np.random.seed(666)
X_train,X_test,y_train,y_test = train_test_split(X,y)

接下来我们还是创建一个函数,为了可视化数据

def plot_model(estimator):
    y_predict = estimator.predict(X_test)
    print(mean_squared_error(y_test,y_predict))
    X_plot = np.linspace(-3,3,100).reshape(-1,1)
    y_plot = estimator.predict(X_plot)
    plt.scatter(X,y)
    plt.plot(X_plot,y_plot,color='r')
    plt.axis([-3,3,-2,6])

这里我进行一个代码的解释说明,我们定义了一个plot_model函数,这个函数的参数是一个已经训练好的模型,之后打印一个均方误差,用于为了测试预测性能;之后就是预测并且绘制图像了

之后我们就可以进行拟合了,这里采用的是多项式回归模型

poly_reg = polynomialRegression(1)
poly_reg.fit(X_train,y_train)
plot_model(poly_reg)

第一行定义了一个polynomialRegression类,参数为1代表是一阶多项式;之后使用fit进行训练,最后将训练好的模型传入到plot_model函数中

运行结果如下
在这里插入图片描述
接下来我们再以二阶多项式和二十阶多项式进行绘制图像
在这里插入图片描述
在这里插入图片描述
接下来我们重新定义管道,使用岭回归

def polynomialRidgeRegression(degree,alpha):
    return Pipeline([
        ('poly',PolynomialFeatures(degree)),
        ('std_scaler',StandardScaler()),
        ('lin_reg',Ridge(alpha=alpha))
    ])

之后我们进行拟合

poly_reg = polynomialRidgeRegression(20,0.0001) 
poly_reg.fit(X_train,y_train)
plot_model(poly_reg)

运行结果如下
在这里插入图片描述
之后我们再重新修改一下参数

poly_reg = polynomialRidgeRegression(20,1000)
poly_reg.fit(X_train,y_train)
plot_model(poly_reg)

运行结果如下
在这里插入图片描述
从均方误差来看,有点正则过头了

那么如果 λ \lambda λ再大点呢

poly_reg = polynomialRidgeRegression(20,100000)  
poly_reg.fit(X_train,y_train)
plot_model(poly_reg)

运行结果如下
在这里插入图片描述
会发现几乎趋近于一条直线了。我们再来看看LASSO回归

🍋LASSO回归(LASSO Regression)

LASSO回归,又称L1正则化,是另一种处理多重共线性问题的线性回归方法。与岭回归不同,LASSO回归在损失函数中添加的正则化项是回归系数的绝对值之和,其数学表达式如下:在这里插入图片描述
与岭回归相比,LASSO回归有以下特点:

  • LASSO回归具有特征选择的能力,它可以将某些回归系数缩减至零,从而自动选择重要的特征。
  • 可以用于稀疏数据集的建模。
  • LASSO回归的正则化路径可以帮助选择最优的正则化参数 λ \lambda λ

然而,LASSO回归也有一些缺点,例如当自变量之间高度相关时,它可能随机选择其中一个自变量并将其系数设为零,不稳定性较高。

🍋实战—LASSO回归

与岭回归类似,这里就不一一赘述了

def polynomialLsssoRegression(degree,alpha):
    return Pipeline([
        ('poly',PolynomialFeatures(degree)),
        ('std_scaler',StandardScaler()),
        ('lin_reg',Lasso(alpha=alpha))
    ])
poly_reg = polynomialLsssoRegression(20,0.01)  
poly_reg.fit(X_train,y_train)
plot_model(poly_reg)

运行结果如下

在这里插入图片描述

poly_reg = polynomialLsssoRegression(20,0.1)  
poly_reg.fit(X_train,y_train)
plot_model(poly_reg)

运行结果如下
在这里插入图片描述

poly_reg = polynomialLsssoRegression(20,1)  
poly_reg.fit(X_train,y_train)
plot_model(poly_reg)

运行结果如下
在这里插入图片描述

🍋岭回归和LASSO哪个更容易是直线

  1. 岭回归:

    岭回归引入的正则化项是L2正则化,它是回归系数的平方和。这个正则化项的作用是限制回归系数的大小,使它们不能过大。因此,岭回归有助于处理多重共线性问题,同时也可以防止过拟合。由于L2正则化是平方和的形式,所以它倾向于平滑回归系数,使它们趋向于均匀分布,不太容易生成稀疏模型。

    岭回归的拟合曲线通常是平滑的,因为它在正则化项中对所有回归系数都施加了一定的约束,不容易将某些系数压缩至零。这意味着岭回归的模型通常不会是严格的直线,而是某种形式的平滑曲线。

  2. LASSO回归:

    LASSO回归引入的正则化项是L1正则化,它是回归系数的绝对值之和。这个正则化项的作用是促使一些不重要的回归系数变为零,实现自动特征选择。因此,LASSO回归可以生成稀疏模型,即只保留一部分重要的特征。

    由于L1正则化的性质,LASSO回归的拟合曲线可能是分段线性的,也就是说,在某些特征上,回归系数为零,因此模型会生成严格的直线。这使得LASSO回归在某些情况下更容易生成直线模型。

🍋岭回归与LASSO回归的应用

这两种回归方法在许多领域都有广泛的应用,包括金融、医学、自然语言处理和工程等。具体应用如下:

  • 金融领域:用于预测股票价格、房地产市场分析和信用评分模型。
  • 医学领域:用于疾病预测、药物研发和医疗成本估计。
  • 自然语言处理:用于文本分类、情感分析和机器翻译等。
  • 工程领域:用于预测材料强度、机械故障检测和质量控制。

🍋L1正则化和L2正则化

L1正则化和L2正则化都是用于线性回归等机器学习模型中的正则化技术,它们的作用是防止模型过拟合,提高模型的泛化能力。它们的区别在于正则化项的形式和影响:
L1正则化(Lasso正则化):

  • 正则化项形式:L1正则化引入的正则化项是回归系数的绝对值之和。在数学上,它是回归系数的L1范数。

  • 效果:L1正则化具有稀疏性质,即它有助于将某些不重要的特征的回归系数缩减至零,从而实现特征选择。这意味着L1正则化可以用来降低模型的复杂性,使模型更简单且易于解释。

  • 稀疏性:L1正则化使得一些回归系数变得精确地等于零,因此可以生成稀疏模型。这对于高维数据集中的特征选择非常有用。

  • 适用情况:L1正则化通常用于具有大量特征的数据集,并且希望自动选择最重要的特征的情况下。它也适用于处理多重共线性问题,但不如L2正则化那样强烈。

L2正则化(Ridge正则化):

  • 正则化项形式:L2正则化引入的正则化项是回归系数的平方和。在数学上,它是回归系数的L2范数。

  • 效果:L2正则化有助于防止模型的回归系数过大,从而降低模型对训练数据的过拟合风险。它不具备L1正则化的稀疏性质,通常不会将回归系数精确地压缩至零,而是使其趋向于较小的值。

  • 平滑性:L2正则化倾向于生成平滑的回归系数,使模型更加稳定。它对多重共线性问题有较好的处理能力,可以减小相关特征之间的系数差异。

  • 适用情况:L2正则化通常用于处理多重共线性问题或者在模型需要保留大部分特征的情况下,但希望限制回归系数的大小以提高模型的泛化能力。

🍋偏差和方差

偏差和方差是统计学和机器学习中两个重要的概念,用于评估模型的性能和泛化能力。它们通常一起讨论,因为它们在模型的复杂性和性能之间存在权衡关系。

  • 偏差(Bias):

    偏差是指模型的预测值与真实值之间的差距,即模型对问题的错误偏向。
    当模型具有高偏差时,意味着它过于简单,无法捕捉数据中的复杂模式。这种情况下,模型可能会欠拟合,导致在训练数据和测试数据上都表现不佳。
    通常来说,增加模型的复杂度(例如增加特征数量或增加模型参数)可以减小偏差,使其更能适应训练数据,但可能增加方差。

  • 方差(Variance):

    方差是指模型对于不同训练数据集的敏感性,即模型在不同数据集上的预测结果波动程度。
    当模型具有高方差时,意味着它过于复杂,对训练数据过度拟合。这种情况下,模型在训练数据上表现很好,但在测试数据上可能表现不佳。
    减小模型复杂度可以减小方差,使其更加稳定,但可能增加偏差。

请添加图片描述

挑战与创造都是很痛苦的,但是很充实。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1026430.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Cannot read properties of null bug解决方法

项目场景: vue3element plusts。 问题描述 本地运行没有任何错误,在生产环境中,当点击按钮,展示el-dialog时第一次正常,关闭时报错 原因分析: 定位到el-dialog组件,最初认为是dialog中table依…

IMAGEBIND: One Embedding Space To Bind Them All论文笔记

论文https://arxiv.org/pdf/2305.05665.pdf代码https://github.com/facebookresearch/ImageBind 1. Motivation 像CLIP这一类的方法只能实现Text-Image这两个模态的 Embedding 对齐,本文提出的ImageBind能够实现六个模态(images, text, audio, depth, t…

进阶指针(一)

✨博客主页:小钱编程成长记 🎈博客专栏:进阶C语言 进阶指针(一) 0.回顾初阶指针1.字符指针1.1 相关面试题 2.数组指针3.指针数组3.1 数组指针的定义3.2 &数组名VS数组名3.3 数组指针的使用 4.数组传参和指针传参4.…

linux下解决tomcat错误问题

错误一: Linux下Tomcat启动报错:Neither the JAVA_HOME nor the JRE_HOME environment variable is defined 原因:可能是Linux环境变了,需要在catalina.sh文件里指定JDK路径 解决方式: 在/bin/catalina.sh配置文件中加…

基于springboot+vue的爱心助农网站(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

Linux离线安装telnet

TELNET rmp地址 链接: https://pan.baidu.com/s/1Yl3zt1p3zjp2fYTwByf7dQ?pwdgdcg 提取码: gdcg 复制这段内容后打开百度网盘手机App,操作更方便哦 命令 rpm -ivh xinetd-2.3.15-14.el7.x86_64.rpm rpm -ivh telnet-0.17-65.el7_8.x86_64.rpm rpm -ivh telnet-…

autoware.ai docker安装

1.进行docker安装 sudo apt-get update sudo apt-get install apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo apt-key fingerprint 0EBFCD88sudo add-apt-reposi…

Unity实战(11):项目非启动状态下使用代码批量替换材质

目录 前言 配置环境 一、场景准备 二、代码演示 三、效果呈现 四、关于Resources.Load()的说明 前言 本文内容为unity在编辑状态(非启动状态)下使用代码批量替换材质,该方法也适用于其他在编辑状态下对物体的操作需求。 配置环境 win1…

Mysql003:用户管理

前言:本章节讲解的是mysql中的用户管理,包括(管理数据用户)、(控制数据库的访问权限)。 目录 1. 查询用户 2. 创建用户 3. 修改用户密码 4. 删除用户 5. 权限控制 1. 查询用户 在mysql数据库中&#xff0…

华为手机如何开启设置健康使用手机模式限制孩子玩手机时间?

华为手机如何开启设置健康使用手机模式限制孩子玩手机时间? 1、在手机上找到「设置」并点击打开; 2、在设置内找到「健康使用手机」并点击进入; 3、开启健康使用手机后,选择孩子使用; 4、在健康使用手机内&#xff0c…

已解决 Java Error: Exception in thread ‘main‘ java.lang.ClassNotFoundException

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页: 🐅🐾猫头虎的博客🎐《面试题大全专栏》 🦕 文章图文并茂&#x1f996…

Godot配置C#语言编写脚本(使用VSCode作为外部编辑器)

文章目录 Godot部分查看VSCode的所在位置配置外部编辑器 配置VSCode编写脚本中文注释 其他文章字符编码 Godot部分 打开编辑器-编辑器设置; 查看VSCode的所在位置 右键单击你的VScode快捷方式,选择属性。 这里的目标就是你的VSCode所在的位置。 配…

并发编程——synchronized

文章目录 原子性、有序性、可见性原子性有序性可见性 synchronized使用synchronized锁升级synchronized-ObjectMonitor 原子性、有序性、可见性 原子性 数据库事务的原子性:是一个最小的执行的单位,一次事务的多次操作要么都成功,要么都失败…

【探索Linux】—— 强大的命令行工具 P.9(进程地址空间)

阅读导航 前言一、内存空间分布二、什么是进程地址空间1. 概念2. 进程地址空间的组成 三、进程地址空间的设计原理1. 基本原理2. 虚拟地址空间 概念 大小和范围 作用 虚拟地址空间的优点 3. 页表 四、为什么要有地址空间五、总结温馨提示 前言 前面我们讲了C语言的基础知识&am…

【智慧工地源码】智慧工地助力数字建造、智慧建造、安全建造、绿色建造

智慧工地围绕建设过程管理,建设项目与智能生产、科学管理建设项目信息生态系统集成在一起,该数据在虚拟现实环境中,将物联网收集的工程信息用于数据挖掘和分析,提供过程趋势预测和专家计划,实现工程建设的智能化管理&a…

Python实验一

1.计算圆椎体体系积。 要求: 交互式输入圆椎体的底面半径和高。 提示:(1)使用两个函数 input()和 eval(),其中 input()函数用于接收用户的输入,接收的值 是字符串;eval()函数用来执行一个字符串表达式&…

2023护网行动面试题目汇总

目录 一、常用的外围打点工具有哪些? 二、描述一下外围打点的基本流程? 三、怎么识别CDN? 四、怎么判断靶标站点是windows系统还是Linux系统? 五、举常见的FOFA在外网打点过程中的查询语句? 六、常见的未授权访问漏洞有哪些…

【官宣】游戏革命刚刚开始!

正如标题所言,随着官方 Aavegotchi dApp 游戏中心的推出,我们的 Gotchi 游戏革命今天正式开始。 游戏中心代表着 Aavegotchi.com 向类似于 Steam 和 Epic Games 等完整游戏平台的重大转变。 游戏中心是当今所有 Gotchi 主题游戏的综合目录,…

深度解剖数据在队列的应用

> 作者简介:დ旧言~,目前大一,现在学习Java,c,c,Python等 > 座右铭:松树千年终是朽,槿花一日自为荣。 > 望小伙伴们点赞👍收藏✨加关注哟💕&#x1…

基于微信小程序+Springboot线上租房平台设计和实现【三端实现小程序+WEB响应式用户前端+后端管理】

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…