做数据分析为何要学统计学(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)
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)模型不是阶数越高越好,而是可决系数和残差比较满意的前提下,阶数越低、变量越少越好(模型越简单越好),也就是我们平时所说的“奥卡姆剃刀法则”。

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

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

相关文章

没有数据线,在手机上查看电脑备忘录怎么操作

在工作中,电脑和手机是我最常用的工具。我经常需要在电脑上记录一些重要的工作事项,然后又需要在手机上查看这些记录,以便随时了解工作进展。但是,每次都需要通过数据线来传输数据,实在是太麻烦了。 有一次&#xff0…

探秘AI赋能的未来世界:CyberAI深度学习技术助力变革

CyberAI平台概述 随着AI技术的极速发展,AI能力正在助力产业加速场景化落地。CyberAI是数新网络面向开发者和企业的一站式AI数据科学平台,提供交互式和可视化建模服务,算法模型全生命周期管理。平台可帮助开发者快速开发AI应用,解…

全都没有问题(一)

字符指针与字符数组的区别与关系 EOF使用指北&#xff0c;南辕北辙&#xff01; #include <stdio.h> #include <stdlib.h> #include <string.h>typedef struct LNode{char name[20];struct LNode *next; }LNode,*LinkList;int main() {char str1[20];char* …

基于若依搭建微服务nacos版本(ruoyi-Cloud)

说明&#xff1a;本文介绍基于Ruoyi-Cloud前后端分离nacos版本的微服务从0到1的搭建过程&#xff0c;是基于官方文档的补充说明&#xff0c;需要结合Ruoyi-Cloud的官方文档 https://doc.ruoyi.vip/ruoyi-cloud/ 如果直接查看官方文档便可成功部署&#xff0c;推荐直接看官方文档…

JS实现日历表

有需要的可以用一下&#xff0c;这是一个简单的demo. HTML&#xff1a; <table><thead><tr><th colspan"2"><span class"left"></span></th><th colspan"3"><span class"time"&g…

typedef的使用

在C语言中&#xff0c;有一个关键字叫做typedef&#xff0c;有些人对此感到很疑惑。不熟悉此知识的同学都会对编程失去细心&#xff0c;直接劝退&#xff08;因为之前我就是这样&#xff09;。、 因为好不容易认识了C语言中所有的关键字&#xff08;就是类型吧&#xff0c;像啥…

c语言:指针与数组

目录 使用指针访问数组 使用第一个元素获取数组首地址 使用数组名获取数组首地址 使用指针访问数组等价于下标访问 使用指针访问数组 指针类型的加减运算可以使指针内保存的首地址移动。指针类型加n后。首地址向后移动 n * 步长 字节。 指针类型减n后。首地址向前移动 n *…

Notion开源平替知识库软件AFFiNE本地部署与公网访问远程协作

文章目录 前言1. 使用Docker安装AFFINE2. 安装cpolar内网穿透工具3. 配置AFFINE公网访问地址4. 实现公网远程访问AFFINE5. 结语 前言 本篇文章讲解Notion开源平替全能知识库工具AFFINE如何本地部署&#xff0c;并实现公网远程访问。AFFiNE 是一个全新的开源项目&#xff0c;旨…

LeetCode Hot100 148.排序链表

题目&#xff1a; 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 class Solution {public ListNode sortList(ListNode head) {return sortList(head, null);}private ListNode sortList(ListNode head, ListNode tail) {if (head null)retur…

Linux NAPI ------------- epoll边缘触发模式

Linux处理网络数据包的一般流程 分组到达内核的时间是不可预测的。所有现代的设备驱动程序都使用中断来通知内核有分组到达。 网络驱动程序对特定于设备的中断设置了一个处理例程&#xff0c;因此每当该中断被引发时&#xff08;即分组到达&#xff09;&#xff0c;内核都调用…

【Sprin Aop基于注解简单案例之所有通知以及实现 快速复习Aop】

通知类型包括&#xff1a; ● 前置通知&#xff1a;Before 目标方法执行之前的通知 ● 后置通知&#xff1a;AfterReturning 目标方法执行之后的通知 ● 环绕通知&#xff1a;Around 目标方法之前添加通知&#xff0c;同时目标方法执行之后添加通知。 ● 异常通知&#xff1a;A…

Linux16 ftp文件服务区、vsftpd文件系统服务安装、lftp客户端安装、NFS远程共享存储

目录 一、FTP基础ftp主动模式ftp被动模式 二、vsftpd配置共享目录编辑配置文件使用windows 访问 三、客户端安装 &#xff08;lftp&#xff09;匿名用户的一些操作&#xff08;lftp {ip}&#xff09;ftp配置本地用户登录配置本地用户ftp配置文件 lftp操作 NFS远程共享存储安装n…

MyBatisPlus基础入门笔记

MyBatisPlus基础入门笔记&#xff0c;源码可见下载链接 大家阅读时可善用目录功能&#xff0c;可以提高大家的阅读效率 下载地址&#xff1a;MyBatisPlus源码笔记 初识MyBatisPlus 入门案例 SpringBoot整合MyBatis&#xff08;复习&#xff09; 创建SpringBoot工程勾选使用的…

Spring Boot整合 Spring Security

Spring Boot整合 1、RBAC 权限模型 RBAC模型&#xff08;Role-Based Access Control&#xff1a;基于角色的访问控制&#xff09; 在RBAC模型里面&#xff0c;有3个基础组成部分&#xff0c;分别是&#xff1a;用户、角色和权限&#xff0c;它们之间的关系如下图所示 SELECT…

智慧工地源码:为施工企业提供专业落地的解决方案

智慧工地利用物联网、大数据、AI等核心技术&#xff0c;实时采集现场数据&#xff0c;自动分析&#xff0c;精准分析、智能决策、科学评价&#xff0c;形成一套数据驱动的新型管理模式。为施工企业提供生产提效、安全可控、成本节约的项目管理解决方案&#xff0c;提升项目部管…

每周一算法:树形动态规划

树形动态规划 树形动态规划一般用于处理求树上最优值的问题。大多数动态规划问题都是在一维二维这种规则的背景下的&#xff0c;可以解决的问题比较局限&#xff0c;而树作为一种特殊的图&#xff0c;可以描述比较复杂的关系&#xff0c;再加上树的递归定义&#xff0c;是一种…

linux系统的u盘/mmc/sd卡等的支持热插拔和自动挂载行为

1.了解mdev mdev是busybox自带的一个简化版的udev。udev是从Linux 2.6 内核系列开始的设备文件系统&#xff08;DevFS&#xff09;的替代品&#xff0c;是 Linux 内核的设备管理器。总的来说&#xff0c;它取代了 devfs 和 hotplug&#xff0c;负责管理 /dev 中的设备节点。同时…

openHarmony添加system_basic权限安装报错

openHarmony添加system_basic权限安装报错 12/14 13:49:57: Install Failed: [Info]App install path:D:\huawei\project\FCTTest\entry\build\default\outputs\default\entry-default-signed.hap, queuesize:0, msg:error: failed to install bundle. error: install failed …

【ET8框架入门】0.ET框架介绍

ET8 新特性 多线程多进程架构,架构更加灵活强大&#xff0c;多线程设计详细内容请看多线程设计课程抽象出纤程(Fiber)的概念&#xff0c;类似erlang的进程&#xff0c;非常轻松的创建多个纤程&#xff0c;利用多核&#xff0c;仍然是单线程开发的体验纤程调度: 主线程&#xf…

LeetCode Hot100 23.合并K个升序链表

题目&#xff1a; 给你一个链表数组&#xff0c;每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中&#xff0c;返回合并后的链表。 方法&#xff1a;分治&#xff0c;类似于归并 class Solution {public ListNode mergeKLists(ListNode[] lists) {return mer…