python数据分析——正则化

参考资料:活用pandas库

        正则化旨在解决模型的过拟合问题。

        在实际中,可能存在模型的训练分数很好,而测试分数却很低,这说明模型出现了过拟合问题。正则化通过对系数和变量施加约束来解决模型过拟合的问题。这会导致数据的系数变小。

        在LASSO回归的情况下,可以丢弃某些系数;而在岭回归中,系数会趋近于0,但但并不是被丢弃。

# 导入pandas库
import pandas as pd
# 读取数据集
acs=pd.read_csv(r"...\data\acs_ny.csv")
# 展示数据列
print(acs.columns)
# 使用patsy创建设计矩阵
from patsy import dmatrices
response,predictors=dmatrices(
'FamilyIncome ~ NumBedrooms + NumChildren + NumPeople + '\
'NumRooms + NumUnits + NumVehicles + NumWorkers + OwnRent + '\
'YearBuilt + ElectricBill + FoodStamp + HeatingFuel + '\
'Insurance + Language',
data=acs)
# 使用sklearn 把数据集分为训练集和测试集
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(predictors,response,random_state=0)from sklearn.linear_model import LinearRegression
lr=LinearRegression().fit(X_train,y_train)
model_coefs=pd.DataFrame(list(zip(predictors.design_info.column_names,lr.coef_[0])),columns=['variable','coef_lr'])
# 展示拟合系数
print(model_coefs)
# 查看模型得分
print(lr.score(X_train,y_train))
print(lr.score(X_test,y_test))

1、LASSO回归

        LASSO(least absolute shrinkage and selection operator),也称L1正则化回归。

# 导入LASSO模块
from sklearn.linear_model import Lasso
lasso=Lasso(random_state=0).fit(X_train,y_train)
coef_lasso=pd.DataFrame(list(zip(predictors.design_info.column_names,lasso.coef_)),columns=['variable','coef_lasso'])
model_coefs=pd.merge(model_coefs,coef_lasso,on='variable')
print(model_coefs)print(lasso.score(X_train,y_train))
print(lasso.score(X_test,y_test))

        此时有些系数已经变成0。但模型的预测得分并未有明显提升。

2、岭回归

        岭回归,也称L2正则化回归。

# 导入Ridge模块
from sklearn.linear_model import Ridge
ridge=Ridge(random_state=0).fit(X_train,y_train)
coef_ridge=pd.DataFrame(list(zip(predictors.design_info.column_names,ridge.coef_[0])),columns=['variable','coef_ridge'])
model_coefs=pd.merge(model_coefs,coef_ridge,on='variable')
print(model_coefs)

3、弹性网

        弹性网结合了岭回归和LASSO回归两种方法。

        ElasticNet对象有两个参数——alpha和l1_ratio,可用于控制模型的行为。l1_ratio参数专门控制L2或L1使用的惩罚量。如果l1_ratio=0,则模型为岭回归;如果l1_ratio=1,则模型是LASSO回归。如果l1_ratio的值介于两者时间,则模型就是岭回归和LASSO回归的组合。

from sklearn.linear_model import ElasticNet
en=ElasticNet(random_state=42).fit(X_train,y_train)
coefs_en=pd.DataFrame(list(zip(predictors.design_info.column_names,en.coef_)),columns=['variable','coef_en'])
model_coefs=pd.merge(model_coefs,coefs_en,on='variable')
print(model_coefs)

4、交叉验证

        交叉验证是拟合模型的常用方法。交叉验证还是选择最后正则化参数的方法。选择模型时,用户必须调整某些参数(也称“超参数”),这时可以使用交叉验证尝试超参数的各种组合,以寻找“最佳模型”。ElasticNet对象的ElasticNetCV函数与之类似,它可以迭代使用各种超参数值来拟合弹性网。

from sklearn.linear_model import ElasticNetCV 
en_cv=ElasticNetCV(cv=5,random_state=42).fit(X_train,y_train)
coefs_en_cv=pd.DataFrame(list(zip(predictors.design_info.column_names,en_cv.coef_)),columns=['variable','coef_en_cv'])
models_coefs=pd.merge(model_coefs,coefs_en_cv,on='variable')
print(model_coefs)

        正则化是一种用来防止数据过度拟合的技术,它通过添加到模型中的每个特征施加一些惩罚来实现该目标。最终结果是从模型中删除一些变量,或减少模型的系数。这两种方法都会降低模型对训练数据的拟合准确度,却能大大提升对未知数据的预测能力。

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

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

相关文章

数据结构与算法之计数排序

目录 前言 计数排序 定义 优缺点 策略 图解 代码实现 结束语 前言 今天是坚持写博客的第20天,时光飞逝,第二个10天即将过去,希望可以继续坚持,光明的未来也在未来等着我们。今天也恰逢高考,祝所有学子一帆风顺…

【DevOps】掌握 Helm:Kubernetes 应用程序部署指南

目录 一、前言 二、什么是 Helm? 三、Helm 的优势 四、Helm 组件 五、安装和配置 Helm 1、先决条件 2、安装 Helm 客户端 3、初始化 Helm 4、添加 Helm Charts 存储库 5、搜索和安装应用程序 5.1、搜索 Helm Charts 5.2、安装应用程序 5.3、自定义应用程…

echarts的toolbox自定义feature标签及事件

1. 需求 在使用echarts图时希望toolbox扩展一些自定义icon和点击事件,而不只是图中这些echarts提供的事件。 2. 文档 属性名类型描述toolbox.featureObject各工具配置项。 feature中除了echarts提供的各个内置的工具按钮外,可以自定义工具按钮。 除…

电脑ip地址查询:快速定位你的网络位置(4种方法)

在互联网的浩瀚海洋中,每台联网的电脑都有一个独特的身份标识,那就是IP地址。无论是进行网络通信、定位问题还是安全防护,了解自己或他人的电脑IP地址都是非常关键的。那么,电脑ip地址查询怎么操作呢?本文将为你提供一…

学习笔记——路由网络基础——缺省(默认)路由

3、缺省(默认)路由 1、定义 缺省路由(默认路由):是目的地址和掩码都为全0的特殊路由。全0代表任意网络。缺省路由在路由表中的形式为:0.0.0.0/0缺省路由也被叫默认路由。缺省路由优先级比直连路由低 缺省路由是一种特殊的路由,当报文没有在…

Facebook海外户Facebook广告被暂停的原因

有很多伙伴在Facebook广告时,有时会遇到账号被暂停,并通知你违反了哪些规则,那么Facebook广告被暂停的原因有哪些呢?今天小编详细梳理了一些原因,可以往下看哦~ 您的Facebook广告被暂停可能有以下几个原因&#xff1a…

Redis系列之淘汰策略介绍

Redis系列之淘汰策略介绍 文章目录 为什么需要Redis淘汰策略?Redis淘汰策略分类Redis数据淘汰流程源码验证淘汰流程Redis中的LRU算法Redis中的LFU算法 为什么需要Redis淘汰策略? 由于Redis内存是有大小的,当内存快满的时候,又没有…

【Qt】TreeWidget中Item的UserCheckable注意事项,没有出现多选框

1. 异常 开启 ItemIsUserCheckable以后,界面上没有出现多选框。 QTreeWidgetItem *item new QTreeWidgetItem();item->setText(0, "hello");item->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsSelectable |Qt::ItemIsEnabled | Qt::ItemIsAuto…

AIGC 介绍与典型应用与亚马逊科技AIGC方案

1、AIGC ( 生成式人工智能 ) 是指可生成全新内容的人工智能技术 从字面意思来看,AIGC 是继 PGC,UGC 之后的新型内容创作方式,可以在创意、表现力、迭代、传播、个性化等方面,充分发挥技术优势,打造新的数字内容生成与…

AXI Quad SPI IP核AXI4接口下的三种操作模式

当选择Enable Performance Mode选项时,AXI4接口包括在内。在该模式下,IP核可以在增强模式下操作(未选择启用XIP模式)或XIP模式(选择启用XIP模式)。在性能模式下,AXI4接口用于在DTR和DRR位置的突…

力扣2106.摘水果

力扣2106.摘水果 在下标上做滑窗 二分出左边最远能取到的点j 自己写lowerbound (j,start)这个区间的水果数就是初值 如何判断一个区间是否合法 先往右走再往左走:fruit(right,0) - start fruit(right,0) - fruit(left,0);先往左走再往右走:start - fru…

ActiveMQ 介绍、下载、安装和控制台

ActiveMQ 介绍 Apache ActiveMQ 是一款非常成熟且功能全面的开源消息中间件,由Apache软件基金会维护。它遵循 Java Message Service (JMS) 规范,这意味着它提供了一组标准的 API,允许 Java 应用程序以一种标准化的方式发送和接收消息。 以下…

为何数据仓库需要“分层次”?

在数据驱动的商业世界中,数据仓库是企业决策的心脏。然而,一个高效、可扩展且易于管理的数据仓库,需要精心设计和构建。分层是构建数据仓库的关键策略之一。本文将探讨数据仓库分层的重要性以及它如何帮助企业更好地管理数据。 数据仓库分层…

操作系统期末填空、问答往年考试题总结

1、什么是文件目录?目录管理的要求有哪些? 文件目录是文件控制块FCB的有序集合,一个文件的文件名和对该文件实施控制管理的说明信息称为文件目录。 实现文件按名存取、提高对目录的检索速度、文件共享、允许文件重名。 2、什么是操作系统&…

游戏研发(策略+sass+回调模式)

前言 由于这边需要对接游戏研发后台,基本就是开服,封禁.角色日志等,但是每个游戏提供的接口都是不一样的,所以为了统一处理提前进行sass封装,以便后续可以更好的兼容 同时还涉及了多数据源的问题,因为有些日志太大不可能直接去http调用,会使用直接查询游戏研发的数据库方式这一…

前端修改接口返回测试工具 Inssman使用教程

之前用的requestly现在要登录才能用了,然后我又登录不上去,同事又推荐了个谷歌插件,试了下,挺好用,还不用登录,用法和之前差不多 下载网站:https://chromewebstore.google.com/detail/inssman-…

mysql json_quote和json_unquote的用法

在 MySQL 中,JSON_QUOTE() 和 JSON_UNQUOTE() 函数与 JSON 数据类型的处理有关。这两个函数在处理 JSON 字符串时特别有用。 JSON_QUOTE() JSON_QUOTE() 函数用于将字符串值转换为有效的 JSON 字符串。它会将特殊字符(如引号、反斜杠等)进行…

从入门到精通:Java Lambda运算符详解!

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一…

力扣 503. 下一个更大元素 II

题目来源:https://leetcode.cn/problems/next-greater-element-ii/description/ C题解:因为是循环数组,所以对数组进行了两次遍历,相当于循环。使用了栈,一个存放元素,一个存放索引,用来更新res…

【C++ | 析构函数】类的析构函数详解

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 ⏰发布时间⏰:2024-06-06 1…