Python大数据分析——岭回归和LASSO回归模型

Python大数据分析——岭回归和LASSO回归模型

  • 模型原因
    • 列数多于行数
    • 变量和变量间存在多重共线性
  • 岭回归模型
    • 理论分析
    • 函数
    • 示例
  • LASSO回归模型
    • 理论分析
    • 函数
    • 示例

模型原因

我们为什么要有岭回归和LASSO回归呢?

因为根据线性回归模型的参数估计公式β=(X’X)-1X’y可知,得到β的前提是矩阵X’X可逆,但在实际应用中,可能会出现自变量个数多于样本量或者自变量间存在多重共线性的情况,即X’X的行列式为0。此时将无法根据公式计算回归系数的估计值β。

列数多于行数

比如电商中,一个顾客可能购买多个商品,那么行数就小于列数
举个例子,我们先构造矩阵:
在这里插入图片描述
计算X‘X
在这里插入图片描述
计算行列式
在这里插入图片描述

变量和变量间存在多重共线性

构造矩阵(X3=2X1,相关性非常强)
在这里插入图片描述
计算X’X
在这里插入图片描述
计算行列式
在这里插入图片描述

岭回归模型

为解决多元线性回归模型中可能存在的不可逆问题,统计学家提出了岭回归模型。该模型解决问题的思路就是在线性回归模型的目标函数之上添加l2正则项(也称为惩罚项)。

理论分析

岭回归的目标函数:
在这里插入图片描述
其中:
1、在线性回归模型的目标函数之上添加l2正则项,其中为非负数
2、当λ=0时,目标函数退化为线性回归模型的目标函数
3、当λ→+∞时,通过缩减回归系数使β趋近于0
4、λ是l2正则项平方的系数,用于平衡模型方差(回归系数的方差)和偏差

然后进行求解
首先展开岭回归模型中的平方项
在这里插入图片描述
计算导函数
对于如何计算的数学公式,我在前面一节:Python大数据分析——一元与多元线性回归模型里有写,大家可以点击直接查看学习,这里直接给出结果
在这里插入图片描述
然后令导数等于0求参数
在这里插入图片描述
在高等数学中,我们可以通过一种凸优化的方法将其等价
在这里插入图片描述
这里我们用几何概念来理解一下这个变化是如何来的
在这里插入图片描述
其中线性回归的目标函数是倒圆锥体,附加约束是圆柱立体模型
在这里插入图片描述
那么这是求β,我们的λ怎么求呢,用的就是交叉验证法

首先将数据集拆分成k个样本量大体相当的数据组(如图中的第一行),并且每个数据组与其他组都没有重叠的观测;
然后从k组数据中挑选k-1组数据用于模型的训练,剩下的一组数据用于模型的测试(如图中的第二行);
以此类推,将会得到k种训练集和测试集。在每一种训练集和测试集下,都会对应一个模型及模型得分(如均方误差)
在这里插入图片描述
就是说当λ=1,放进10重数据组,得出一个平均得分;然后2、3…的时候都会有一个,然后看哪一个λ最可靠。

函数

λ值的确定–交叉验证法
RidgeCV(alphas=(0.1, 1.0, 10.0), fit_intercept=True, normalize=False,
scoring=None, cv=None)
alphas:用于指定多个lambda值的元组或数组对象,默认该参数包含0.1、1和10三种值。
fit_intercept:bool类型参数,是否需要拟合截距项,默认为True。
normalize:bool类型参数,建模时是否需要对数据集做标准化处理,默认为False。
scoring:指定用于评估模型的度量方法。
cv:指定交叉验证的重数。

注意:
最新版本的RidgeCV函数已经没有normalize=False的设置了

示例

先来看下数据长什么样:
在这里插入图片描述

# 导入第三方模块
import pandas as pd
import numpy as np
from sklearn import model_selection
from sklearn.linear_model import Ridge,RidgeCV
from sklearn.metrics import mean_squared_error

# 读取糖尿病数据集
diabetes = pd.read_excel(r'D:\pythonProject\data\diabetes.xlsx')
# 构造自变量(剔除患者性别、年龄和因变量,这些都为非数值化参数)
predictors = diabetes.columns[2:-1]
# 将数据集拆分为训练集和测试集
X_train, X_test, y_train, y_test = model_selection.train_test_split(diabetes[predictors], diabetes['Y'], 
                                                                    test_size = 0.2, random_state = 1234 )

# 构造不同的Lambda值(初始值是-5,终值是2,生成个数是200的一个等比数列)
Lambdas = np.logspace(-5, 2, 200) 
# 设置交叉验证的参数,对于每一个Lambda值,都执行10重交叉验证
ridge_cv = RidgeCV(alphas = Lambdas, scoring='neg_mean_squared_error', cv = 10 ) # 评估得分为MSE(y-y预测)^2/N
# 模型拟合
ridge_cv.fit(X_train, y_train)
# 返回最佳的lambda值
ridge_best_Lambda = ridge_cv.alpha_
# ridge_best_Lambda

# 基于最佳的Lambda值建模
ridge = Ridge(alpha = ridge_best_Lambda)
ridge.fit(X_train, y_train)
# 返回岭回归系数
pd.Series(index = ['Intercept'] + X_train.columns.tolist(), data = [ridge.intercept_] + ridge.coef_.tolist())

# 预测
ridge_predict = ridge.predict(X_test)
# 预测效果验证
RMSE = np.sqrt(mean_squared_error(y_test,ridge_predict))
RMSE

输出:

1、最佳λ的值是:
0.6080224261649427
2、岭回归系数是:
在这里插入图片描述
3、预测及其效果验证:
53.38642682397507

LASSO回归模型

理论分析

岭回归模型解决线性回归模型中矩阵X’X不可逆的办法是添加l2正则的惩罚项,但缺陷在于始终保留建模时的所有变量,无法降低模型的复杂度。 对于此,Lasso回归采用了l1正则的惩罚项。所以他的优势就是降维了。
在这里插入图片描述
进行凸优化的等价
在这里插入图片描述
其系数几何意义
在这里插入图片描述
在这里插入图片描述
让俩个图像相交,发现比圆的图相交好收敛,也就是复杂度低

函数

λ值的确定–交叉验证法
LassoCV(alphas=None, fit_intercept=True, normalize=False, max_iter=1000, tol=0.0001)
alphas:指定具体的Lambda值列表用于模型的运算
fit_intercept:bool类型参数,是否需要拟合截距项,默认为True
normalize:bool类型参数,建模时是否需要对数据集做标准化处理,默认为False
max_iter:指定模型最大的迭代次数,默认为1000次
tol:是收敛条件

最新的功能包是没有normalize参数的

示例

依然是上面的糖尿病数据集

# 导入第三方模块
import pandas as pd
import numpy as np
from sklearn import model_selection
from sklearn.linear_model import Lasso,LassoCV
from sklearn.metrics import mean_squared_error

# 读取糖尿病数据集
diabetes = pd.read_excel(r'D:\pythonProject\data\diabetes.xlsx')
# 构造自变量(剔除患者性别、年龄和因变量,这些都为非数值化参数)
predictors = diabetes.columns[2:-1]
# 将数据集拆分为训练集和测试集
X_train, X_test, y_train, y_test = model_selection.train_test_split(diabetes[predictors], diabetes['Y'], 
                                                                    test_size = 0.2, random_state = 1234 )

# 构造不同的Lambda值(初始值是-5,终值是2,生成个数是200的一个等比数列)
Lambdas = np.logspace(-5, 2, 200) 
# LASSO回归模型的交叉验证,都执行10重交叉验证,允许最大一万次迭代
lasso_cv = LassoCV(alphas = Lambdas, cv = 10, max_iter=10000)
lasso_cv.fit(X_train, y_train)
# 输出最佳的lambda值
lasso_best_alpha = lasso_cv.alpha_
# lasso_best_alpha

# 基于最佳的lambda值建模
lasso = Lasso(alpha = lasso_best_alpha, max_iter=10000)
lasso.fit(X_train, y_train)
# 返回LASSO回归的系数
pd.Series(index = ['Intercept'] + X_train.columns.tolist(), data = [lasso.intercept_] + lasso.coef_.tolist())

# 预测
lasso_predict = lasso.predict(X_test)
# 预测效果验证
RMSE = np.sqrt(mean_squared_error(y_test,lasso_predict))
RMSE

输出:
1、最佳λ的值是:
0.08026433522257174
2、LASSO回归系数:
在这里插入图片描述
3、预测及其效果验证:
53.373985839769475

发现小于岭回归的53.38642682397507,所以略优于他

我们进行还可以进行线性回归比对

# 导入第三方模块
from statsmodels import api as sms
# 为自变量X添加常数列1,用于拟合截距项
X_train2 = sms.add_constant(X_train)
X_test2 = sms.add_constant(X_test)

# 构建多元线性回归模型
linear = sms.OLS(y_train, X_train2).fit()
# 返回线性回归模型的系数
linear.params

# 模型的预测
linear_predict = linear.predict(X_test2)
# 预测效果验证
RMSE = np.sqrt(mean_squared_error(y_test,linear_predict))
RMSE

输出:
53.42623939722987
发现比他们都大,说明效果不如这两者好。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

3DGS渐进式渲染 - 离线生成渲染视频

总览 输入:环绕Object拍摄的RGB视频 输出:自定义相机路径的渲染视频(包含渐变效果) 实现过程 首先,编译3DGS的C代码,并跑通convert.py、train.py和render.py。教程如下: github网址&#xf…

HarmonyOS开发实例:【分布式手写板】

介绍 本篇Codelab使用设备管理及分布式键值数据库能力,实现多设备之间手写板应用拉起及同步书写内容的功能。操作流程: 设备连接同一无线网络,安装分布式手写板应用。进入应用,点击允许使用多设备协同,点击主页上查询…

spring06:mybatis-spring(Spring整合MyBatis)

spring06:mybatis-spring(Spring整合MyBatis) 文章目录 spring06:mybatis-spring(Spring整合MyBatis)前言:什么是 MyBatis-Spring?MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合…

【VIC水文模型】准备工作:平台软件安装

VIC水文模型所需平台软件安装 1 Arcgis安装2 Cygwin安装(Linux系统)3 Matlab/R/Fortran的安装Notepad 4 VIC模型程序代码获取参考 由于VIC模型的编程语言为C语言,交互方式为控制台输指令,需要在Linux系统上运行。Windows 上使用 …

简述PDF原理和实践

Hello,我是小恒不会java。 由于最近有输出PDF报表的项目需求,所以复习一下PDF到底是什么,该如何产生,如何应用至项目中。 更多参见Adobe官方文档(https://www.adobe.com/cn/) PDF原理 PDF(Port…

Docker应用推荐个人服务器实用有趣的项目推荐

Wallabag:是一个开源的、自托管的文章阅读和保存工具。它允许你保存网页文章并进行离线阅读,去除广告和不必要的内容,以提供更好的阅读体验。Wallabag支持多种导入和导出格式,并提供了一些实用的功能,如标签、阅读列表…

Flutter 像素编辑器#03 | 像素图层

theme: cyanosis 本系列,将通过 Flutter 实现一个全平台的像素编辑器应用。源码见开源项目 【pix_editor】 《Flutter 像素编辑器#01 | 像素网格》《Flutter 像素编辑器#02 | 配置编辑》《Flutter 像素编辑器#03 | 像素图层》 上一篇我们实现了编辑配置,…

【R语言】组合图:散点图+箱线图+平滑曲线图+柱状图

用算数运算符轻松组合不同的ggplot图,如图: 具体代码如下: install.packages("devtools")#安装devtools包 devtools::install_github("thomasp85/patchwork")#安装patchwork包 library(ggplot2) library(patchwork) #p1是…

Spark/SparkSQL读取Hadoop LZO文件概述

一、前置配置 IDEA Maven安装配置 Scala(可选) Java Hadoop.dll(可能需要,具体看有无相关错误信息) hadoop-lzo-0.xx.xx.jar(如果你的版本过高,需要到官网下载高版本,mvnrepository仓…

2024年——区块链技术进入全新高度

BTC生态蓬勃发展,以太坊的L1和L2模块化重塑智能合约生态。RAAS(区块链即服务)、Depin、并行EVM等技术的崛起,为区块链应用提供了更高的性能和可扩展性。以太坊再质押成为焦点。技术创新与日俱进,一同探索这个充满活力的…

优思学院|ISO45001职业健康安全管理体系是什么?

ISO45001:2018是新公布的国际标准规范,全球备受期待的职业健康与安全国际标准(OH&S)于2018年公布,并将在全球范围内改变工作场所实践。ISO45001将取代OHSAS18001,成为全球工作场所健康与安全的参考。 ISO45001:201…

HarmonyOS开发实例:【分布式新闻客户端】

介绍 本篇Codelab基于栅格布局、设备管理和多端协同,实现一次开发,多端部署的分布式新闻客户端页面。主要包含以下功能: 展示新闻列表以及左右滑动切换新闻Tab。点击新闻展示新闻详情页。点击新闻详情页底部的分享按钮,发现周边…

可见光相机曝光方式

可见光摄影中的曝光方式主要包括两种:卷帘曝光和全局曝光。它们之间的区别在于曝光过程中传感器或胶片感光部分的工作方式不同,这直接影响到图像捕获的效果和特性。 卷帘曝光(Rolling Shutter): 工作原理:在…

工业自动化,3D视觉技术3C薄片自动化上料

随着制造业的快速发展,3C行业对薄片类零件的上料需求日益增长。传统的上料方式往往依赖于人工操作,效率低下且存在误差。为了解决这一问题,3D视觉技术应运而生,为3C薄片自动化上料提供了强大的技术支持。本文将探讨3D视觉技术如何…

美格智能出席紫光展锐第三届泛金融支付生态论坛,引领智慧金融变革向新

4月16日,以“融智创新,共塑支付产业新生态”为主题的紫光展锐第三届泛金融支付生态论坛在福州举办,来自金融服务机构、分析师机构、终端厂商、模组厂商等行业各领域生态伙伴汇聚一堂,探讨金融支付产业的机遇与挑战。作为紫光展锐重…

(4.6–4.12)投融资周报|共29笔公开投融资事件,基础设施继续领跑,游戏、RWA、Depi、NFT相关融資活躍

本周千万美金以上融资有6笔: 高性能的第 1 层区块链Monad完成了一轮2.25 亿美元的融资,投资方为Paradigm、Coinbase Ventures等。 互联网基础设施解决方案Auradine完成了8000 万美元的B轮融资,投资方为Celesta Capital、Mayfield等。 比特币…

利用大语言模型,矢量数据库实现数据库的智能搜索

目的 数据库使用SQL 语言查询数据,数据库的记录中要有一个关键字段(通常称为主键字段,它的值在数据库列表中是唯一的),数据记录是结构化的. 如果你需要根据数据记录的内容来查询数据记录,就需要通过Select 语句在数据库…

【数学】主成分分析(PCA)的应用案例解析(Python)

接着上文PCA的数学详细推导过程,本文介绍使用Python结合图像压缩案例解释PCA的具体实现流程,以了解数据处理的一些方法 Jupyter Notebook file 文章目录 借助 scikit-learn 实现 PCA输入数据PCA降维并重建 手动实现 PCA 过程输入数据数据居中处理协方差矩…

自动驾驶(八十四)---------中间件对比分析

很久没有写博客了,CSDN无故非法删了我第82篇,让我很恼火,一直提不起兴趣重新写一遍第82篇。但回初心,知识需要用自己的语言输出,所以今天对比分析自动驾驶中间件: 1. 中间件介绍 在自动驾驶架构中&#xf…

【Git】git命令大全(持续更新)

本文架构 0.描述git简介术语 1.常用命令2. 信息管理新建git库命令更改存在库设置获取当前库信息 3.工作空间相关将工作空间文件添加到缓存区(增)从工作空间中移除文件(删)撤销提交 4.远程仓库相关同步远程仓库分支 (持…