做数据分析为何要学统计学(10)——如何进行回归分析

​回归分析(regression analysis)是量化两种或两种以上因素/变量间相互依赖关系的统计分析方法。回归分析根据因素的数量,分为一元回归和多元回归分析;按因素之间依赖关系的复杂程度,可分为线性回归分析和非线性回归分析。我们通过一下两个例子介绍如何使用python完成回归分析。

在python中有多个软件包可以用于回归分析,在这里我们选择 sklearn软件包中的LinearRegression训练算法,之所以选择该算法是因为它支持多元回归,还可以用于非线性回归分析(多项式回归)。

1.线性回归分析

某调查公司采集了多人健康数据,试图建立体重与身高和每天运动时长的量化关系。

人员体重身高运动时长
1521.652
2631.682
3711.751
4821.781
5901.922
61081.81
7851.782
8721.751
9631.621

代码如下:

import numpy as np
from sklearn.linear_model import LinearRegression
#构造样本数据之因变量(体重)
y=np.array([52,63,71,82,90,108,85,72,63])
#构造样本数据之因变量(身高和运动时长)
X=np.array([[1.65,2],[1.68,2],[1.75,1],[1.78,1],[1.92,2],[1.8,1],[1.78,2],[1.75,1],[1.62,1]])
#创建回归模型
model=LinearRegression().fit(X,y)
#查看模型,第一个是截距,后面是自变量的系数(身高变量和运动时长变量)
model.intercept_,model.coef_
#(-173.9154414624661, array([150.83625049,  -9.33963438]))

公式为:weight=150.83*height-9.34*time-173.92。拟合值及其残差如下表所示。

人员体重身高运动时长拟合值残差
1521.65256.2695-4.2695
2631.68260.79442.2056
3711.75180.6925-9.6925
4821.78185.2174-3.2174
5901.92296.9936-6.9936
61081.8188.23419.766
7851.78275.87749.1226
8721.75180.6925-8.6925
9631.62161.08461.9154

如果残差均值接近0且服务正态分布,也就是说残差是白噪声,则模型通过质量评价。以下为模型评价代码。

#可决系数,自变量对因变量变化的影响程度,越接近1越好,但无经验阈值
r2 = model.score(X, y)
print(r2)
#求预测值
y1=model.predict(X)
#查看模型准确率
print(1-(abs(y1-y)/(y+0.00001)).mean())
#计算残差,残差是白噪声(均值为0的正态分布)系列说明拟合公式已经提取完全部有用信息
res=y-model.predict(X)
#绘制QQ图
from statsmodels.graphics.api import qqplot
%matplotlib inline
ax=qqplot(res,line="s")
#或使用Ljung-Box检验,p值>0.05可认定为白噪声
from statsmodels.stats.diagnostic import acorr_ljungbox
print(acorr_ljungbox(res))

输出结果为:

0.6816823621107787
0.9097391886649957lb_stat  lb_pvalue
1  0.022422   0.880971

上述模型的可决系数R^2=0.6816823621107787, 准确率为0.9097,Ljung-Box检验 p值=0.880971。模型通过评价。其残差QQ图如下(没有按对角线分布,残差质量不是很高,说明该模型因素间不是质量很高的线性回归关系,因此拟合出来的线性回归模型准确率也不算高)。

标残差图题
预测值与真实值重合度低

 

2.非线性回归分析

我们对上例进行多项式回归分析,试图用多项式(单项式的线性组合)来拟合其非线性关系。所谓单项式就是数字与字母的乘积,如a,5a,ab,ab^2

代码如下:

#引入高阶单项式构造函数
from sklearn.preprocessing import  PolynomialFeatures
#构造2阶单项式
new_X=PolynomialFeatures(degree=2).fit_transform(X)

​构造出的新的单项式为

人员常数项heighttimeheight^2height*timetime^2
111.6522.72253.34
211.6822.82243.364
311.7513.06251.751
411.7813.16841.781
511.9223.68643.844
611.813.241.81
711.7823.16843.564
811.7513.06251.751
911.6212.62441.621

然后以上述数据为自变量,与y建立线性回归关系,就构造出现二元二次多项式回归公式。代码如下。

model=LinearRegression().fit(new_X,y)
model.intercept_,model.coef_
#(-706.4617834336859,array([   0.        ,  739.84211301,    2.80313388, -157.23758678,-20.80508628,    8.40940164]))
r2 = model.score(new_X, y)

公式为weight=739.84*height+2.8*time-157.24*height^2-20.81*height*time+8.41*time^2-706.46

可决系数R^2=0.6976766101600638,与线性回归没有太多差异,说明二阶多项式拟合能力一般。我们可以再尝试更高阶的多项式。比如将阶数提高到3后,其可决系数值高达0.97,准确率达到0.98,取得了良好的拟合效果。

标题预测值与真实值重合程度显著提升

需要说明的是

(1)回归分析要注意自变量之间的多重共线性(即变量之间高度相关),这说明有些变量是冗余变量需要剔除,以免影响模型的泛化水平。

(2)如果我们剔除了冗余变量,就需要重新拟合回归模型,重新进行模型评价。因此模型的拟合一般需要进行多轮才能获得高质量回归模型。

(3)模型不是阶数越高越好,而是可决系数和残差比较满意的前提下,阶数越低、变量越少越好(模型越简单越好),也就是我们平时所说的“奥卡姆剃刀法则”。

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

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

相关文章

VRP的优质解与劣质解的区别分析

关键词 数据挖掘 启发式 车辆路由问题 问题特定知识 文章概述 启发式算法是解决复杂组合优化问题时的首选武器。尽管大量的研究集中在对特定问题调整启发式,但很少有研究来研究问题本身的结构特征。 文章认为,关于区分组合优化问题的好解和不那么好解…

【面试】测试/测开(NIG2)

145. linux打印前row行日志 参考&#xff1a;linux日志打印 前10行日志 head -n 10 xx.log后10行日志 tail -n 10 xx.log tail -10f xx.log使用sed命令 sed -n 9,10p xx.log #打印第9、10行使用awk命令 awk NR10 xx.log #打印第10行 awk NR>7 && NR<10 xx.log …

【EI会议征稿】第三届电子信息工程、大数据与计算机技术国际学术会议(EIBDCT 2024)

第三届电子信息工程、大数据与计算机技术国际学术会议&#xff08;EIBDCT 2024&#xff09; 2024 3rd International Conference on Electronic Information Engineering, Big Data and Computer Technology 第三届电子信息工程、大数据与计算机技术国际学术会议&#xff08;…

任务调度系统就该这么设计(万能通用),稳的一批!

今天来扒一扒轻量级的分布式任务调度平台Xxl-Job背后的架构原理 核心概念 这里还是老样子&#xff0c;为了保证文章的完整性和连贯性&#xff0c;方便那些没有使用过的小伙伴更加容易接受文章的内容&#xff0c;快速讲一讲Xxl-Job中的概念和使用 如果你已经使用过了&#xf…

知识付费平台选择指南:如何找到最适合你的学习平台?

在当今的知识付费市场中&#xff0c;用户面临的选择越来越多&#xff0c;如何从众多知识付费平台中正确选择属于自己的平台呢&#xff1f;下面&#xff0c;我们将为您介绍我有才知识付费平台相比同行的优势&#xff0c;帮助您做出明智的选择。 一、创新的技术架构&#xff0c;…

【Spark精讲】Spark与MapReduce对比

目录 对比总结 MapReduce流程 ​编辑 MapTask流程 ReduceTask流程 MapReduce原理 阶段划分 Map shuffle Partition Collector Sort Spill Merge Reduce shuffle Copy Merge Sort 对比总结 Map端读取文件&#xff1a;都是需要通过split概念来进行逻辑切片&…

C++中的多态你真的了解吗?多态原理全面具体讲解

目录 1. 多态的概念 2. 多态的定义及实现 2.1 多态的构成条件 2.2 虚函数 2.3 虚函数的重写 2.4 C11 override 和 final 2.5 重载、覆盖(重写)、隐藏(重定义)的对比 3. 抽象类 3.1 概念 4. 多态的原理 4.1 虚函数表 4.2多态的原理 4.3 动态绑定与静态绑定 5. 单继…

vscode的文件和文件夹的警告标志如何消去

由于平时用vscode写一些java的小demo, 但是这个vscode的警告和错误管理很奇怪, 这个警告信息会显示在这个侧边的文件和文件夹中, 我上网上找能不能把这个给去掉的办法, 找了半天没找到。 于是我就自己去查了一下这个vscode的设置, 真让我找到了这方面的开关, 把下面的这个关闭…

32、应急响应——linux

文章目录 一、linux进程排查二、linux文件排查三、linux用户排查四、linux持久化排查4.1 历史命令4.2 定时任务排查4.3 开机启动项排查 五、linux日志分析六、工具应用 一、linux进程排查 查看资源占用&#xff1a;top查看所有进程&#xff1a;ps -ef根据进程PID查看进程详细信…

SpringBoot 究竟是如何跑起来的

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《SpringBoot》。&#x1f3af;&#x1f3af; &…

mfc配置halcon环境

新建mfc窗体 选择基于对话框 打开项目属性 1、附加包含目录添加&#xff1a; $(HALCONROOT)\include;$(HALCONROOT)\include\halconcpp 2、链接器->常规->附加库目录 $(HALCONROOT)\lib\x64-win64 3、链接器->输入->附加依赖项 halcon.lib;halconcpp.lib 在对话…

支出管理如何帮助企业抵御经营成本压力?

近日&#xff0c;国内中小企业协会发布最新中小企业发展指数情况&#xff0c;虽然经济持续恢复向好&#xff0c;但依然面临困难和挑战。企业经营成本压力不减&#xff0c;效益状况总体仍不乐观。 许多中小企业采取被动措施&#xff0c;想方设法削减成本。然而&#xff0c;如果…