Python用正则化Lasso、岭回归预测房价、随机森林交叉验证鸢尾花数据可视化2案例|数据分享...

2023-09-12 16:38:39

全文链接:https://tecdat.cn/?p=33632

机器学习模型的表现不佳通常是由于过度拟合或欠拟合引起的,我们将重点关注客户经常遇到的过拟合情况点击文末“阅读原文”获取完整代码数据)。

相关视频

过度拟合是指学习的假设在训练数据上拟合得非常好,以至于对新数据的模型性能造成负面影响。该模型对于训练数据中没有的新实例的泛化能力较差。

复杂模型,如随机森林、神经网络和XGBoost,更容易出现过度拟合。简单模型,如线性回归,也可能出现过度拟合——这通常发生在训练数据中的特征数量多于实例数量时。

如何检测过度拟合?

最基本的交叉验证实现类型是基于保留数据集的交叉验证。该实现将可用数据分为训练集和测试集。要使用基于保留数据集的交叉验证评估我们的模型,我们首先需要在保留集的训练部分上构建和训练模型,然后使用该模型对测试集进行预测,以评估其性能。

我们了解了过度拟合是什么,以及如何使用基于保留数据集的交叉验证技术来检测模型是否过度拟合。让我们获取一些数据,并在数据上实施这些技术,以检测我们的模型是否过度拟合。

python
# 导入库
import pandas as pd

from sklearn.model_selection import train_test_split

# 加载数据集
df = pd.DataFrame(data= dataset.data)

# 将目标标签添加到数据框中
df["target"] = dataset.target

# 分离特征和目标标签
X = df.iloc[:, :-1]

# 分割训练集和测试集(基于保留数据集的交叉验证)
X_train, X_test, y_train, y_test = train_test_split(X, y,
                      

# 实例化模型
clf = RandomForestClassifier(random_state=24)

# 绘制学习曲线
plot_learning_curves(X_train=X_train,
                     y_train=y_train,

16bba0febd23288f7c94aa7a3d45e4f6.png

在上面的图片中,我们可以清楚地看到我们的随机森林模型对训练数据过度拟合。我们的随机森林模型在训练集上有完美的分类错误率,但在测试集上有0.05的分类错误率。这可以通过散点图上两条线之间的间隙来说明。


点击标题查阅往期内容

d866c7d7f2b17c27fda7a0ff5cf62846.png

PYTHON链家租房数据分析:岭回归、LASSO、随机森林、XGBOOST、KERAS神经网络、KMEANS聚类、地理可视化

outside_default.png

左右滑动查看更多

outside_default.png

01

155c6a7d953b350931c1e0e146e41494.png

02

8dcadc9d238201680e25c32368b116d2.png

03

7a749c7d2b98b221b4b2bc5d32715cc5.png

04

72affc435ab73f7c665d193944c1d5fa.png

另外,我们可以通过改进模型来对抗过度拟合。我们可以通过减少随机森林或XGBoost中的估计器数量,或者减少神经网络中的参数数量来简化模型。我们还可以引入一种称为“提前停止”的技术,即在达到设定的训练轮次之前提前停止训练过程。

另一种简化模型的方法是通过正则化向模型中添加偏差。

正则化是什么,为什么我们需要它?

正则化技术在机器学习模型的开发中起着至关重要的作用。尤其是复杂模型,如神经网络,容易过拟合训练数据。从数学或机器学习的角度来看,"regularize"一词表示我们正在使某个东西规则化。在数学或机器学习的上下文中,我们通过添加信息来使某个东西规则化,以创建一个可以防止过拟合的解决方案。在我们的机器学习上下文中,我们要使某个东西规则化的是"目标函数",即我们在优化问题中尝试最小化的东西。

优化问题

为了获得我们模型的"最佳"实现,我们可以使用优化算法来确定最大化或最小化目标函数的一组输入。通常,在机器学习中,我们希望最小化目标函数以降低模型的误差。这就是为什么目标函数在从业者中被称为损失函数的原因,但也可以称为成本函数。

有大量流行的优化算法,包括:

  • 斐波那契搜索

  • 二分法

  • 线性搜索

  • 梯度下降

  • ...等等

没有正则化的梯度下降

梯度下降是一种一阶优化算法。它涉及采取与梯度相反方向的步骤,以找到目标函数的全局最小值(或非凸函数的局部最小值)。

要用数学方式表达梯度下降的工作原理,假设N是观测值的数量,Y_hat是实例的预测值,Y是实例的实际值。

262da515a2e6feabe59cc3c2c1a29eb6.png

为了确定要采取的步长(大小)以及方向,我们计算:

84318575435e59b4425f753dfd2c3b73.png

其中η是学习率 - 学习率是优化算法中的一个调节参数,它确定每次迭代时向最小损失函数的最小值移动的步长[来源: Wikipedia]。然后,在每次迭代之后,更新模型的权重,更新规则如下:

d5e346b0f1b7d97347dce3f482935940.png

其中Δw是一个包含每个权重系数w的权重更新的向量。下面的函数演示了如何在Python中实现不带任何正则化的梯度下降优化算法。

为了更好地理解这一点,让我们构建一个人工数据集和一个没有正则化的线性回归模型来预测训练数据。

python
# 导入所需模块

import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

# 加载数据

df = pd.read_csv

# 选择一个特征
# 为了简单起见,只使用100个实例
X = df.loc[:100, 5]
y = df.loc[:100, 13] # 目标标签

# 重塑数据
X_reshaped = X[:, np.newaxis]
y_reshaped = y[:, np.newaxis]

# 实例化线性回归模型
linear_regression = LinearRegression()

# 训练模型
linea

# 进行预测
y_p

# 评估模型
mse = mea_squared_rrr(_esaped y_red)
print(f"均方误差:{mse}\n")

# 绘制最佳拟合线
sns.sca
plt.title("无正则化的线性回归模型")

>>>> 均方误差:9.7

f2c74a44fb527669e7bca67da7671295.png

L1 正则化

L1 正则化,也被称为 L1 范数或 Lasso(在回归问题中),通过将参数收缩到0来防止过拟合。这使得某些特征变得不相关。

例如,假设我们想使用机器学习来预测房价查看文末了解数据免费获取方式。考虑以下特征:

  • Street – 道路通行能力,

  • Neighborhood – 物业位置,

  • Accessibility – 交通便利程度,

  • Year Built – 房屋建造年份,

  • Rooms – 房间数量,

  • Kitchens – 厨房数量,

  • Fireplaces – 房屋中的壁炉数量。

当预测房屋价值时,直觉告诉我们不同的输入特征对价格的影响不同。例如,与壁炉数量相比,社区或房间数量对房价的影响更大。

数学上,我们通过扩展损失函数来表达 L1 正则化:

d89a52558957499ada3b3c1cc5a53580.png

实质上,当我们使用L1正则化时,我们对权重的绝对值进行惩罚。

尽管如此,在我们的示例回归问题中,Lasso回归(带有L1正则化的线性回归)将产生一个高度可解释的模型,并且只使用了输入特征的子集,从而降低了模型的复杂性。

以下是Python中使用Lasso回归的示例代码:

python
import warnings
warnings.filterwarnings("ignore")

import numpy as np

from sklearn.metrics import mean_squared_error

# 加载数据

df = pd.read_csv(URL, header=None)

# 选择单个特征(为简单起见,仅使用100个实例)
y = df.loc[:100, 13] # 目标标签 

# 重塑数据
y_reshaped = y[:, np.newaxis]

# 实例化Lasso回归模型
lasso = Lasso

# 训练模型
lassped)

# 进行预测
y_predict(X_eshed)

# 评估模型
print(f"均方误差:{mse}")
print(f"模型系数:{lasso.coef_}\n")

# 绘制最佳拟合线
plt.title("带有L1正则化的线性回归模型(Lasso)")
plt.show()

输出结果为:

均方误差:34.7
模型系数:[0.]

9d89a637fa275391c5ca807bcd1b83d5.png

L2正则化

L2正则化,也被称为L2范数或Ridge(在回归问题中),通过将权重强制变小来防止过拟合,但不会使其完全为0。

在执行L2正则化时,我们在损失函数中添加的正则化项是所有特征权重的平方和:

06332fd928acd7afe6c59026bed063cd.png

L2正则化返回的解决方案是非稀疏的,因为权重不会为零(尽管某些权重可能接近于0)。

L1正则化和L2正则化的区别:

  • L1正则化对权重的绝对值之和进行惩罚,而L2正则化对权重的平方和进行惩罚。

  • L1正则化的解是稀疏的,而L2正则化的解是非稀疏的。

  • L2正则化不进行特征选择,因为权重只会被减小到接近于0的值,而不是变为0。L1正则化内置了特征选择功能。

  • L1正则化对异常值具有鲁棒性,而L2正则化没有。

Python中Ridge回归的示例代码:

python

from sklearn.linear_model import LinearRegression, Lasso, Ridge
from sklearn.metrics import mean_squared_error

# 加载数据

df = pd.read_csv(URL, header=None)

# 为简单起见,选择一个特征和100个实例
y = df.loc[:100, 13] # 目标标签

# 重塑数据
X_reshaped = X[:, np.newaxis]

# 实例化、训练和推断
ridge = Rdge(apha=100)

print(f"均方误差:{mse}")
print(f"模型系数:{ridge.coef_}\n")

sns.scatterplot(X,y)
plt.title("带有L2正则化(Ridge)的线性回归模型")
plt.show()

>>>> 均方误差:25.96309109305436
模型系数:[[1.98542524]]

491978d0e1a83454d3968f08cdc26f01.png

观察Ridge回归模型中的alpha值,它为100。超参数alpha值越大,权重值越接近于0,但不会变为0。

L1正则化和L2正则化哪个更好?

哪种正则化方法更好是一个供学者们争论的问题。然而,作为实践者,在选择L1和L2正则化之间需要考虑一些重要因素。我将它们分为6个类别,并告诉你每个类别哪个解决方案更好。

哪个解决方案更鲁棒?L1

L1正则化比L2正则化更具鲁棒性,原因是L2正则化对权重进行平方处理,因此数据中的异常值的代价呈指数增长。L1正则化对权重取绝对值,所以代价只会线性增长。

哪个解决方案具有更多可能性?L1

我指的是到达一个点的解决方案的数量。L1正则化使用曼哈顿距离到达一个点,所以有很多路线可以走到达一个点。L2正则化使用欧几里得距离,这将告诉您最快到达某个点的方法。这意味着L2范数只有一个可能的解决方案。

如前所述,L2正则化仅将权重缩小到接近于0的值,而不是真正变为0。另一方面,L1正则化将值收缩到0。这实际上是一种特征选择的形式,因为某些特征完全从模型中删除了。

总结

在本文中,我们探讨了过拟合是什么,如何检测过拟合,损失函数是什么,正则化是什么,为什么需要正则化,L1和L2正则化的工作原理以及它们之间的区别。

数据获取

在公众号后台回复“房价”,可免费获取完整数据。

883be6400ffed9795403936fb232bbda.jpeg

本文中分析的房价数据分享到会员群,扫描下面二维码即可加群!

a9782a5a6ed645e7ca437d825f54ab52.png

0e7406ad9537b9bd724250c22d4dc3fd.jpeg

点击文末“阅读原文”

获取全文完整代码数据资料。

本文选自《Python用正则化Lasso、岭回归预测房价、随机森林交叉验证鸢尾花数据可视化2案例》。

1b090dd2891539a47ba6053f122bf4e3.jpeg

bf83efdfcfb34f446093abadc5b5ce45.png

点击标题查阅往期内容

R语言贝叶斯广义线性混合(多层次/水平/嵌套)模型GLMM、逻辑回归分析教育留级影响因素数据

Python中的Lasso回归之最小角算法LARS

高维数据惩罚回归方法:主成分回归PCR、岭回归、lasso、弹性网络elastic net分析基因数据

Python高维变量选择:SCAD平滑剪切绝对偏差惩罚、Lasso惩罚函数比较

R语言惩罚logistic逻辑回归(LASSO,岭回归)高维变量选择的分类模型案例

R使用LASSO回归预测股票收益

广义线性模型glm泊松回归的lasso、弹性网络分类预测学生考试成绩数据和交叉验证

贝叶斯分位数回归、lasso和自适应lasso贝叶斯分位数回归分析免疫球蛋白、前列腺癌数据

R语言RSTAN MCMC:NUTS采样算法用LASSO 构建贝叶斯线性回归模型分析职业声望数据

r语言中对LASSO回归,Ridge岭回归和弹性网络Elastic Net模型实现

R语言高维数据惩罚回归方法:主成分回归PCR、岭回归、lasso、弹性网络elastic net分析基因数据(含练习题)

Python中LARS和Lasso回归之最小角算法Lars分析波士顿住房数据实例

R语言Bootstrap的岭回归和自适应LASSO回归可视化

R语言Lasso回归模型变量选择和糖尿病发展预测模型

R语言实现贝叶斯分位数回归、lasso和自适应lasso贝叶斯分位数回归分析

基于R语言实现LASSO回归分析

R语言用LASSO,adaptive LASSO预测通货膨胀时间序列

R语言自适应LASSO 多项式回归、二元逻辑回归和岭回归应用分析

R语言惩罚logistic逻辑回归(LASSO,岭回归)高维变量选择的分类模型案例

Python中的Lasso回归之最小角算法LARS

r语言中对LASSO回归,Ridge岭回归和弹性网络Elastic Net模型实现

r语言中对LASSO回归,Ridge岭回归和Elastic Net模型实现

R语言实现LASSO回归——自己编写LASSO回归算法

R使用LASSO回归预测股票收益

python使用LASSO回归预测股票收益

Python中LARS和Lasso回归之最小角算法Lars分析波士顿住房数据实例

R语言Bootstrap的岭回归和自适应LASSO回归可视化

R语言Lasso回归模型变量选择和糖尿病发展预测模型

R语言实现贝叶斯分位数回归、lasso和自适应lasso贝叶斯分位数回归分析

基于R语言实现LASSO回归分析

R语言用LASSO,adaptive LASSO预测通货膨胀时间序列

R语言自适应LASSO 多项式回归、二元逻辑回归和岭回归应用分析

R语言惩罚logistic逻辑回归(LASSO,岭回归)高维变量选择的分类模型案例

Python中的Lasso回归之最小角算法LARS

r语言中对LASSO回归,Ridge岭回归和弹性网络Elastic Net模型实现

r语言中对LASSO回归,Ridge岭回归和Elastic Net模型实现

R语言实现LASSO回归——自己编写LASSO回归算法

R使用LASSO回归预测股票收益

python使用LASSO回归预测股票收益

R语言随机森林RandomForest、逻辑回归Logisitc预测心脏病数据和可视化分析

数据分享|R语言逻辑回归、线性判别分析LDA、GAM、MARS、KNN、QDA、决策树、随机森林、SVM分类葡萄酒交叉验证ROC

MATLAB随机森林优化贝叶斯预测分析汽车燃油经济性

R语言用Rcpp加速Metropolis-Hastings抽样估计贝叶斯逻辑回归模型的参数

R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病

R语言中贝叶斯网络(BN)、动态贝叶斯网络、线性模型分析错颌畸形数据

R语言中的block Gibbs吉布斯采样贝叶斯多元线性回归

Python贝叶斯回归分析住房负担能力数据集

R语言实现贝叶斯分位数回归、lasso和自适应lasso贝叶斯分位数回归分析

Python用PyMC3实现贝叶斯线性回归模型

R语言用WinBUGS 软件对学术能力测验建立层次(分层)贝叶斯模型

R语言Gibbs抽样的贝叶斯简单线性回归仿真分析

R语言和STAN,JAGS:用RSTAN,RJAG建立贝叶斯多元线性回归预测选举数据

R语言基于copula的贝叶斯分层混合模型的诊断准确性研究

R语言贝叶斯线性回归和多元线性回归构建工资预测模型

R语言贝叶斯推断与MCMC:实现Metropolis-Hastings 采样算法示例

R语言stan进行基于贝叶斯推断的回归模型

R语言中RStan贝叶斯层次模型分析示例

R语言使用Metropolis-Hastings采样算法自适应贝叶斯估计与可视化

R语言随机搜索变量选择SSVS估计贝叶斯向量自回归(BVAR)模型

WinBUGS对多元随机波动率模型:贝叶斯估计与模型比较

R语言实现MCMC中的Metropolis–Hastings算法与吉布斯采样

R语言贝叶斯推断与MCMC:实现Metropolis-Hastings 采样算法示例

R语言使用Metropolis-Hastings采样算法自适应贝叶斯估计与可视化

视频:R语言中的Stan概率编程MCMC采样的贝叶斯模型

R语言MCMC:Metropolis-Hastings采样用于回归的贝叶斯估计

R语言用lme4多层次(混合效应)广义线性模型(GLM),逻辑回归分析教育留级调查数据

R语言随机森林RandomForest、逻辑回归Logisitc预测心脏病数据和可视化分析

R语言基于Bagging分类的逻辑回归(Logistic Regression)、决策树、森林分析心脏病患者

R语言用主成分PCA、 逻辑回归、决策树、随机森林分析心脏病数据并高维可视化

c8df1f680137b4ebb79620d0d3c66154.png

736467fcedc31304a8971b9d45797bcf.jpeg

78b4c1007139f049ecf5cb2b6ce3c492.png

更多推荐

Java之File类的详细解析及小练习

2.File类2.1概述java.io.File类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。2.2构造方法publicFile(Stringpathname):通过将给定的路径名字符串转换为抽象路径名来创建新的File实例。publicFile(Stringparent,Stringch

GSMA SGP.01协议学习

GSMASGP.01协议学习1简介1.1概述许多机器对机器设备将不易于达到供应订购的目的。这将需要一个新的解决方案来适应这种特殊情况。要求是在假定采用与今天相同或相似的认证协议的情况下,为具有获得移动网络访问所必需的凭证的“无线”远程配置机器对机器设备定义机制。MNO必须能够响应请求,将订阅(合同)从一个MNOA更改为

薄盒借周杰伦IP卖藏品 车翻在奈雪的茶

在瑞幸联名茅台、喜茶联名FENDI、茶百道联名米哈游后,奈雪的茶搭上了周杰伦。9月14日,在《范特西》专辑发行22周年之际,奈雪的茶推出“范特西音乐宇宙”主题的奶茶与周边。周杰伦系IP加持,奈雪的茶卖爆了,范特西Style的奶茶首日销量达146万杯。然而,车翻得也快,当Jay粉以为奈雪的茶联名了周杰伦时,这个奶茶品牌否

MySQL——变量和存储过程

2023.9.18变量系统变量:全局变量会话变量自定义变量:用户变量局部变量一、系统变量说明:系统变量由系统定义,不是用户定义,属于服务器层面注意:全局变量需要添加global关键字,会话变量需要添加session关键字,如果不写,默认会话变量。使用步骤:1、查看所有系统变量showglobal|【session】va

selenium自动化测试入门

Selenium是一个基于浏览器的自动化测试工具,它提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium是用于自动化控制浏览器做各种操作,打开网页,点击按钮,输入表单等等,可以模拟各种人工操作浏览器的功能,主要用途是自动化测试领域,但是也可以用于爬虫领域,或自动化办公领域。本次只是简单入门操作,在

优化测试准备-通过仿真诊断提高效率

现如今,随着车辆中电子器件和软件数量的快速增加,直接在车辆上测试50-150个ECU变得越来越复杂,且需测试的内容也不再局限于单独的系统,而是包括了各个系统之间的交互,最终导致测试过程中的工作量呈指数级增长。一自动化测试减少了测试工作量面对日益增长的工作量,实现自动化测试可能是解决这个问题的一大关键。对此,必须提升效力

linux万字图文学习进程信号

1.信号概念信号是进程之间事件异步通知的一种方式,属于软中断。1.1linux中我们常用Ctrl+c来杀死一个前台进程1.Ctrl-C产生的信号只能发给前台进程。一个命令后面加个&可以放到后台运行,这样Shell不必等待进程结束就可以接受新的命令,启动新的进程。2.Shell可以同时运行一个前台进程和任意多个后台进程,

mysql数据库备份(mysqldump)

mysqldump命令备份数据mysqldump-uroot-p--databases数据库1数据库2>xxx.sqlmysqldump常用操作示例1.备份全部数据库的数据和结构mysqldump-uroot-p123456-A>/data/mysqlbackup/mydb.sql2.备份全部数据库的结构(加-d参数)

计算机竞赛 深度学习 大数据 股票预测系统 - python lstm

文章目录0前言1课题意义1.1股票预测主流方法2什么是LSTM2.1循环神经网络2.1LSTM诞生2如何用LSTM做股票预测2.1算法构建流程2.2部分代码3实现效果3.1数据3.2预测结果项目运行展示开发环境数据获取最后0前言🔥优质竞赛项目系列,今天要分享的是🚩深度学习大数据股票预测系统该项目较为新颖,适合作为竞

SpringMVC之JSON返回&异常处理机制

一.什么是SpringMVC之JSON返回&异常处理机制二.Json处理导入pom.xml依赖导入Spring-Mvc.xml编写JsonController编写Sql语句测试结果json转换的注解测试结果(@JsonIgnore)三.全局异常处理机制为什么要全局异常处理异常处理思路​编辑自写一个错误代码​编辑输出结果

【vue组件】使用element-ui table 实现嵌套表格 点击展开时获取数据

应用场景是这样主表格的数据是所有的学校然后点击展开的时候,获取学校下相应班级的数据并且班级要能选择后生成图表,但所有的班级最多选择5个首先是嵌套表格<div><el-table:data="tableDisplayData"id="chartTableExpand"style="width:100%"ref="char

热文推荐