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

article/2025/9/16 22:22:35

正则惩罚解决过拟合(Ridge回归和Lasso回归)

    • 案例五: 正则惩罚解决过拟合(Ridge回归和Lasso回归)
      • 3.2.1 模块加载与数据读入
      • 3.2.2 特征工程
      • 3.2.3 模型搭建与应用

手动反爬虫,禁止转载: 原博地址 https://blog.csdn.net/lys_828/article/details/121460567(CSDN博主:Be_melting)

 知识梳理不易,请尊重劳动成果,文章仅发布在CSDN网站上,在其他网站看到该博文均属于未经作者授权的恶意爬取信息

案例五: 正则惩罚解决过拟合(Ridge回归和Lasso回归)

模型过拟合解决的方式一般有三种:增加数据量,减少模型复杂度,正则惩罚。一般情况下,数据量基本上是确定了,模型也是指定的,可以调整的就是最后一种方式。正则惩罚的模式可以有如下三种:

  • L1(Ridge回归对应绝对值):

    在这里插入图片描述

  • L2(Lasso回归对应平方):
    在这里插入图片描述

  • Elastic Net(L1和L2的结合):
    在这里插入图片描述

结合着实际案例进行正则惩罚的使用,数据集来自于kaagle网站,数据获取网址:https://www.kaggle.com/anthonypino/melbourne-housing-market。

3.2.1 模块加载与数据读入

新建一个python3文件,命名为正则惩罚模型.ipynb。数据集中的字段在之前的短租房和房价预测案例分析中基本上都有介绍,然后直接导入模块进行数据读取。

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as snsimport warnings
warnings.filterwarnings('ignore')dataset = pd.read_csv('./data/Melbourne_housing_FULL.csv')
dataset

输出结果如下。(数据集中共有34857条数据,21个字段)
在这里插入图片描述
通过nunique()方法可以快速查看各个字段中的唯一值的数量,用来确定一些分类字段(唯一值较少)和连续字段(唯一值较多)。输出结果如下,其中显然统计数值低于20的字段都可以认定为分类字段,比如房子所在的地区Regionname,而数据超过100的也基本上为数值连续字段。
在这里插入图片描述

3.2.2 特征工程

假定通过数据EDA 已经知道了哪些因素是重要数据特征 ,进行数据提取(通过corr()和heatmap()方法进行关联性探究)。本案例中主要探讨的是惩罚项如何使用,对于关联性这里不用再深究,直接提取有关联的字段构建数据集。

cols_to_use = ['Suburb', 'Rooms', 'Type', 'Method', 'SellerG', 'Regionname', 'Propertycount', 'Distance', 'CouncilArea', 'Bedroom2', 'Bathroom', 'Car', 'Landsize', 'BuildingArea', 'Price']
dataset = dataset[cols_to_use]

首先查看数据集中缺失数据情况,输出结果如下。
在这里插入图片描述
然后针对与不同类型的数据进行不同方式的缺失值处理,第一类数据直接进行0填充。

cols_to_fill_zero = ['Propertycount', 'Distance', 'Bedroom2', 'Bathroom', 'Car']
dataset[cols_to_fill_zero] = dataset[cols_to_fill_zero].fillna(0)

另一种,使用数据的均值进行填充。

dataset['Landsize'] = dataset['Landsize'].fillna(dataset.Landsize.mean())
dataset['BuildingArea'] = dataset['BuildingArea'].fillna(dataset.BuildingArea.mean())

标签数据一般不进行填充,而是直接进行删除。

dataset.dropna(inplace=True)

处理完毕后,再次核实缺失值数据情况,输出结果如下。
在这里插入图片描述
前面使用nunique()方法确定部分字段属于分类数据,而对于分类数据传入数据模型之前需要进行独热编码的处理,处理的方式直接使用get_dummies()方法即可解决。由下面的输出结果可知,构建数据集中原有15个字段扩展为745个字段。
在这里插入图片描述
至此,数据集清洗和转化的工作都完成了,下一步再次核实数据集的缺失值情况,没有缺失值后就可以进行模型的创建和应用
在这里插入图片描述

3.2.3 模型搭建与应用

(1)构建特征数据与标签数据。

X = dataset.drop('Price', axis=1)
y = dataset['Price']

(2)划分训练集和测试集。按照9:1的比例进行拆分。

from sklearn.model_selection import train_test_split
train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.1, random_state=2)

(3)模型初始化与训练。

from sklearn.linear_model import LinearRegression
reg = LinearRegression().fit(train_X, train_y)

(4)模型评估。

模型在训练集和测试集中的表现的结果输出如下。(很显然和上一个案例创建的模型类似,都是在训练数据上表现的还算可以,但是在测试数据上面得分小于0,存在着过拟合现象)
在这里插入图片描述
(5)L1惩罚模型。

导入linear_model模块中的Lasso模型,其中的三个参数,可以调用使用手册查看对应的说明文档,本案例的重点不是对于参数的讲解,而是如何进行正则惩罚的使用,模型创建和训练的代码如下。

from sklearn import linear_model
lasso_reg = linear_model.Lasso(alpha=50, max_iter=100, tol=0.1)
lasso_reg.fit(train_X, train_y)

进一步评估模型在训练集和测试集中的得分,结果如下。(经过L1正则惩罚的模型在训练集和测试集上表现均可,且两者的得分情况相近,解决了过拟合的问题)
在这里插入图片描述

(6)L2惩罚模型

使用的方式和L1类似,导入linear_model模块下的Ridge模型,三个参数与L1中的保持一致,创建和训练模型的代码如下。

from sklearn.linear_model import Ridge
ridge_reg= Ridge(alpha=50, max_iter=100, tol=0.1)
ridge_reg.fit(train_X, train_y)

进一步评估模型在训练集和测试集中的得分,结果如下。(经过L2正则惩罚的模型在训练集和测试集上表现均可,且两者的得分情况相近,解决了过拟合的问题。与L1不同的是,L2模型在测试集上的表现要比训练集好,而L1模型却相反)
在这里插入图片描述

关于惩罚模型的通俗的理解,以赛车比赛为例:第一名的赛车手要比第二名、第三名快7s,这个概念相当于成绩绝对碾压。而在平时的比赛中,前三名的比分咬的很死,基本上只会存在0.1s,0.2s的差距,7s这个时间差就相当于是老手和新手的之间的对比。为了提高比赛的观赏性,避免出现这种绝对优势的情景,可以在第一名的赛车上增加负重,比如增加100kg配重,此时第一名还是领先3s,那么再加配重到200kg,比赛结果中发现此时的赛车手落后原来的第二名0.3s,这次的调整就解决了比赛选手之间的实力悬殊的问题,保证了观赏性。这个过程就类似惩罚模型的工作原理,辅助对于惩罚模型的理解。

补充(经验之谈):在处理离散数据比较多时后使用L2惩罚模型比较好,处理连续数据模型较多时候使用L1惩罚模型比较好。


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

相关文章

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…

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

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

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

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