做数据分析为何要学统计学(9)——什么是回归分析

​回归分析(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)
r2
#计算残差,残差是白噪声(均值为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
acorr_ljungbox(res)

上述模型的可决系数R^2=0.6816823621107787, 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,取得了良好的拟合效果。

需要说明的是

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

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

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

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

相关文章

记录 | ubuntu源码编译安装/更新boost版本

一、卸载当前的版本 1、查看当前安装的boost版本 dpkg -S /usr/include/boost/version.hpp通过上面的命令,你就可以发现boost的版本了,查看结果可能如下: libboost1.54-dev: /usr/include/boost/version.hpp 2、删除当前安装的boost sudo …

人工智能数据集可视化统计分析工具:快速了解你的数据集

人工智能数据集可视化统计分析工具:快速了解你的数据集 简介特征示例报告安装用法 简介 Lightly Insights:可以轻松获取关于机器学习数据集基本洞察的工具,可以可视化图像数据集的基本统计信息,仅需提供一个包含图像和对象检测标…

perl处理json的序列化和反序列化

perl可以使用JSON模块很方便的处理json的序列化和反序列化。先来一段简单的例子: #! /usr/bin/perl use v5.14; use JSON; use IO::File;my $info {id > 1024,desc > hello world,arry > [1, 2, 3, 4, 5],obj > {char > [ A, B, C ]} };say to_jso…

微服务学习:Nacos微服务架构中的服务注册、服务发现和动态配置Nacos下载

Nacos的主要用途包括: 服务注册与发现:Nacos提供了服务注册和发现的功能,服务提供者可以将自己的服务注册到Nacos服务器上,服务消费者则可以通过Nacos来发现可用的服务实例,从而实现服务调用。 动态配置管理&#xff…

力扣编程题算法初阶之双指针算法+代码分析

目录 第一题:复写零 第二题:快乐数: 第三题:盛水最多的容器 第四题:有效三角形的个数 第一题:复写零 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 思路: 上期…

【媒体邀约】年底企业应该做哪些宣传工作?

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 年底是企业进行宣传的好时机,以下是一些建议: 1. 年终总结:发布企业的年度业绩报告、新产品或服务、市场活动等方面的总结,展示企业的成长…

Day06(下) Liunx高级系统设计7-磁盘映射与共享内存

磁盘映射MMAP 概述 存储映射 I/O (Memory-mapped I/O) 使一个磁盘文件与存储空间中的一个缓冲区相 映射。于是当从缓冲区中取数据,就相当于读文件中的相应字节。于此类似,将数据存 入缓冲区,则相应的字节就自动写入文件。这样&#xff…

使用JLink仿真器实现调试打印的N种方法

方法一:使用MCU的串口 这是最古老也是最简单的方法。 电脑上面插一个USB转TTL,然后与MCU的UART_RX/UART_TX/GND连接起来。PC端再打开一个串口调试助手。两边的波特率一致,就可以收到MCU发过来的打印信息了。 方法二:使用JLink仿…

10天玩转Python第2天:python判断语句基础示例全面详解与代码练习

目录 1.课程之前1.1 复习和反馈1.2 作业1.3 今日内容1.4 字符串格式化的补充1.5 运算符1.5.1 逻辑运算符1.5.2 赋值运算符1.5.3 运算符优先 2.判断2.1 if 的基本结构2.1.1 基本语法2.1.2 代码案例2.1.3 练习 2.2 if else 结构2.2.1 基本语法2.2.2 代码案例2.2.3 练习 2.3 if 和…

java--BigDecimal

1.BigDecimal 用于解决浮点型运算时,出现结果失真的问题 2.BigDecimal的常见构造器、常用方法

如何使用unittest批量管理Python接口自动化测试用例?

我们日常项目中的接口测试案例肯定不止一个,当案例越来越多时我们如何管理这些批量案例?如何保证案例不重复?如果案例非常多(成百上千,甚至更多)时如何保证案例执行的效率?如何做(批…

Vmware突然无法获取IP(二)

一 测试环境 宿主机: window10Vmware 17 proUbuntu 18.04虚拟机中 二 问题 之前虚拟机可以正常使用。过程中,安装了docker(不确定是否和这个有关系)第二天开启虚拟机时,发现网口为down的状态。将网口up后&#xff0…

聊聊跨进程共享内存的内部工作原理

在 Linux 系统的进程虚拟内存中,一个重要的特性就是不同进程的地址空间是隔离的。A 进程的地址 0x4000 和 B 进程的 0x4000 之间没有任何关系。这样确确实实是让各个进程的运行时互相之间的影响降到了最低。某个进程有 bug 也只能自己崩溃,不会影响其它进…

vector类

> 作者简介:დ旧言~,目前大二,现在学习Java,c,c,Python等 > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:熟悉vector库 > 毒鸡汤:从人生低谷…

【交流】PHP生成唯一邀请码

目录 前言: 1.随机生成,核对user表是否已存在 代码: 解析: 缺点: 2.建表建库,每次从表中随机抽取一条,用完时扩充 表结构 表视图 代码 解析 缺点 结论: 前言: …

Amazon 亚马逊内推

点击关注公众号,分享 WLB、大厂内推,面经、热点新闻,可内推公司90,累计帮助8000 靠谱的内推君 专注于WLB、大厂精选内推,助力每位粉丝拿到满意的Offer! 公司简述 亚马逊公司(Amazon&#xff…

基于单片机远程温控检测系统

**单片机设计介绍,基于单片机远程温控检测系统(含上位机) 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的远程温控检测系统可以用于远程监测和控制温度,实现远程温度监…

UDP报文格式详解

✏️✏️✏️各位看官好,今天给大家分享的是 传输层的另外一个重点协议——UDP。 清风的CSDN博客 🛩️🛩️🛩️希望我的文章能对你有所帮助,有不足的地方还请各位看官多多指教,大家一起学习交流&#xff0…

江苏中服产业党总支一行莅临蓝海创意云参观交流

12月5日上午,江苏中服产业党总支及直播产业“两新”党支部一行莅临蓝海创意云参观交流,蓝海创意云相关领导热情接待,双方就直播业务进行了深度沟通,未来将携手合作共同推动直播产业的创新发展。 在蓝海创意云一楼展厅,…

2024年网络安全竞赛-网站渗透

网站渗透 (一)拓扑图 1.使用渗透机对服务器信息收集,并将服务器中网站服务端口号作为flag提交; 使用nmap工具对靶机进行信息收集 2.使用渗透机对服务器信息收集,将网站的名称作为flag提交; 访问页面即可 3.使用渗透机对服务器渗透,将可渗透页面的名称作为flag提交…
最新文章