数据分析实战 | 线性回归——女性身高与体重数据分析

目录

一、数据集及分析对象

二、目的及分析任务

三、方法及工具

四、数据读入

五、数据理解

六、数据准备

七、模型训练

八、模型评价

九、模型调参

十、模型预测


实现回归分析类算法的Python第三方工具包比较常用的有statsmodels、statistics、scikit-learn等,下面我们主要采用statsmodels。

一、数据集及分析对象

CSV文件——“women.csv”。

数据集链接:https://download.csdn.net/download/m0_70452407/88519967

该数据集给出了年龄在30~39岁的15名女性的身高和体重数据,主要属性如下:

(1)height:身高

(2)weight:体重

二、目的及分析任务

理解机器学习方法在数据分析中的应用——采用简单线性回归、多项式回归方法进行回归分析。

(1)训练模型。

(2)对模型进行拟合优度评价和可视化处理,验证简单线性回归建模的有效性。

(3)采用多项式回归进行模型优化。

(4)按多项式回归模型预测体重数据。

三、方法及工具

Python语言及第三方工具包pandas、matplotlib和statsmodels。

四、数据读入

import pandas as pd
df_women=pd.read_csv("D:\\Download\\JDK\\数据分析理论与实践by朝乐门_机械工业出版社\\第3章 回归分析\\women.csv",
                     index_col=0)

五、数据理解

对数据框df_women进行探索性分析。

df_women.describe()

df_women.shape
(15, 2)

 接着,对数据库df_women进行数据可视化分析,通过调用mayplotlib.pyplot包中数据框(DataFrame)的scatter()方法绘制散点图。

import matplotlib.pyplot as plt
plt.scatter(df_women["height"],df_women["weight"])

从输出结果可以看出,女性身高与体重之间的关系可以进行线性回归分析,需要进一步进行数据准备工作。

六、数据准备

进行线性回归分析之前,应准备好模型所需的特征矩阵(X)和目标向量(y)。这里我们采用Python的统计分析包statsmodel进行自动类型转换。

X=df_women['height']
y=df_women['weight']

七、模型训练

以女性身高height作为自变量、体重weight作为因变量对数据进行简单线性回归建模,这里采用Python的统计分析包statsmodels中的OLS函数进行建模分析。

import statsmodels.api as sm

statsmodels.OLS()方法的输入有(endog,exog,missing,hasconst)4个,其中,endog是回归中的因变量,即上述模型中的weight,exog则是自变量的值,即模型中的height。

默认情况下,statsmodels.OLS()方法不含截距项,因此应将模型中的常数项看作基为1的维度上的系数。所以,exog的输入中,最左侧的一列的数值应全为1。这里我们采用statsmodels中提供的可直接解决这一问题的方法——sm.add_constant()给X新增一列,列名为const,每行取值为1.0

X_add_const=sm.add_constant(X)
X_add_const

在自变量X_add_const和因变量y上使用OLS()方法进行简单线性回归。

myModel=sm.OLS(y,X_add_const)

然后获取拟合结果,并调用summary()方法显示回归拟合的结果。

results=myModel.fit()
print(results.summary())
 OLS Regression Results                            
==============================================================================
Dep. Variable:                 weight   R-squared:                       0.991
Model:                            OLS   Adj. R-squared:                  0.990
Method:                 Least Squares   F-statistic:                     1433.
Date:                Thu, 09 Nov 2023   Prob (F-statistic):           1.09e-14
Time:                        18:28:09   Log-Likelihood:                -26.541
No. Observations:                  15   AIC:                             57.08
Df Residuals:                      13   BIC:                             58.50
Df Model:                           1                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
const        -87.5167      5.937    -14.741      0.000    -100.343     -74.691
height         3.4500      0.091     37.855      0.000       3.253       3.647
==============================================================================
Omnibus:                        2.396   Durbin-Watson:                   0.315
Prob(Omnibus):                  0.302   Jarque-Bera (JB):                1.660
Skew:                           0.789   Prob(JB):                        0.436
Kurtosis:                       2.596   Cond. No.                         982.
==============================================================================

Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
C:\ProgramData\Anaconda3\lib\site-packages\scipy\stats\_stats_py.py:1769: UserWarning: kurtosistest only valid for n>=20 ... continuing anyway, n=15
  warnings.warn("kurtosistest only valid for n>=20 ... continuing "

上述运行结果中第二部分的coef列所对应的const和height就是计算出的回归模型中的截距项和斜率。

除了读取回归摘要外,还可以调用params属性查看拟合结果的斜率和截距。

results.params
const    -87.516667
height     3.450000
dtype: float64

 从输出结果可以看出,回归模型中的截距项和斜率分别为-87.516667和3.450000

八、模型评价

以R^2(决定系数)作为衡量回归直线对观测值拟合程度的指标,其取值范围为[0,1],越接近1,说明“回归直线的拟合优度越好”。可以调用requared属性查看拟合结果的R^2

results.rsquared
0.9910098326857505

除了决定系数等统计量,还可以通过可视化方法更直观地查看回归效果。这里我们调用matplotlib.pyplot包中的plot()方法,将回归直线与真实数据绘制在一个图中进行比较。

y_predict=results.params[0]+results.params[1]*df_women["height"]
plt.rcParams['font.family']="simHei"   #汉字显示 字体设置
plt.plot(df_women["height"],df_women["weight"],"o")
plt.plot(df_women["height"],y_predict)
plt.title("女性身高与体重的线性回归分析")
plt.xlabel("身高")
plt.ylabel("体重")

从输出结果可以看出,采用简单线性回归模型的效果还可以进一步优化,为此采取多项式回归方法进行回归分析。

九、模型调参

调用Python的统计分析包statsmodels中的OLS()方法对自变量女性身高height、因变量体重weight进行多项式回归建模。

假设因变量y与自变量X、X^2、X^3存在高元线性回归,因此在多项式分析中,特征矩阵由3部分组成,即X、X^2和X^3。通过调用numpy库的column_stack()方法创建特征矩阵X。

import numpy as np
X=np.column_stack((X,np.power(X,2),np.power(X,3)))

通过sm.add_constant()方法保留多项式回归中的截距项。对自变量X_add_const和因变量y使用OLS()方法进行多项式回归。

X_add_const=sm.add_constant(X)
myModel_updated=sm.OLS(y,X_add_const)
results=myModel_updated.fit()
print(results.summary())
OLS Regression Results                            
==============================================================================
Dep. Variable:                 weight   R-squared:                       1.000
Model:                            OLS   Adj. R-squared:                  1.000
Method:                 Least Squares   F-statistic:                 1.679e+04
Date:                Thu, 09 Nov 2023   Prob (F-statistic):           2.07e-20
Time:                        18:46:54   Log-Likelihood:                 1.3441
No. Observations:                  15   AIC:                             5.312
Df Residuals:                      11   BIC:                             8.144
Df Model:                           3                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
const       -896.7476    294.575     -3.044      0.011   -1545.102    -248.393
x1            46.4108     13.655      3.399      0.006      16.356      76.466
x2            -0.7462      0.211     -3.544      0.005      -1.210      -0.283
x3             0.0043      0.001      3.940      0.002       0.002       0.007
==============================================================================
Omnibus:                        0.028   Durbin-Watson:                   2.388
Prob(Omnibus):                  0.986   Jarque-Bera (JB):                0.127
Skew:                           0.049   Prob(JB):                        0.939
Kurtosis:                       2.561   Cond. No.                     1.25e+09
==============================================================================

Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
[2] The condition number is large, 1.25e+09. This might indicate that there are
strong multicollinearity or other numerical problems.
C:\ProgramData\Anaconda3\lib\site-packages\scipy\stats\_stats_py.py:1769: UserWarning: kurtosistest only valid for n>=20 ... continuing anyway, n=15
  warnings.warn("kurtosistest only valid for n>=20 ... continuing "

从输出结果可以看出,多项式回归模型中的截距项为-896.7476,而X、X^2、X^3对应的斜率分别为46.4108、-0.7462和0.0043

调用requared属性查看拟合结果的R^2:

results.rsquared
0.9997816939979361

 从决定系数的结果可以看出,多项式回归模型的效果比简单线性回归模型的效果更好。

十、模型预测

使用该多项式回归模型进行体重预测并输出预测结果。

y_predict_updated=results.predict()
y_predict_updated
array([114.63856209, 117.40676937, 120.18801264, 123.00780722,
       125.89166846, 128.86511168, 131.95365223, 135.18280543,
       138.57808662, 142.16501113, 145.9690943 , 150.01585147,
       154.33079796, 158.93944911, 163.86732026])

 多项式回归模型的可视化:

y_predict=(results.params[0]+results.params[1]*df_women["height"]+
           results.params[2]*df_women["height"]**2+
           results.params[3]*df_women["height"]**3)

plt.plot(df_women["height"],df_women["weight"],"o")
plt.plot(df_women["height"],y_predict)
plt.title("女性身高与体重的多项式回归分析")
plt.xlabel("身高")
plt.ylabel("体重")

从结果可以看出,采用多项式回归后拟合效果显著提高,结果较为令人满意。 

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

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

相关文章

【CASS精品教程】cass 3d基于osgb三维模型生成等高线的两种方法

对于植被、房屋稀少的地方,可以基于osgb模型直接生成等高线。本文讲解在cass11.0 3d中基于osgb三维模型生成等高线的两种方法。 一、加载osgb三维模型 二、生成等高线 1. 绘制等高线 cass11版本提供了绘制单个等高线的功能。 点击【绘制等高线】,提示输入等高距。 输入固定…

MySQL的高阶语句

数据库的权限一般很小,工作中使用最多的场景就是查 排序、分组、子查询、视图、多表连接查询(左连接、右连接、内连接) create TABLE info ( id int(4) primary key, NAME varchar(5) not null, score decimal(5,2), address varchar(20)…

渗透测试必备工具--Metasploit(流程梳理与meterpreter权限分析)

目录 一、攻击前期准备必会的命令(msf流程) 1、启动:msfdb run 或者 msfconsole 2、Payload生成:msfvenom 3、查找相关模块:search 4、选择使用模块:use 5、返回上一层:back 6、查看需要…

猫罐头哪家好?宠物店自用的5款猫罐头推荐!猫咪嘎嘎炫~

亲爱的铲屎官们,你们是否会为猫咪选购猫罐头而感到烦恼?你们是否渴望了解哪些猫罐头在宠物界有着良好的口碑?猫罐头,作为猫咪日常饮食中的重要组成部分,其品质直接影响到猫咪的健康和幸福。 猫罐头哪家好?作…

go 引入包报错“构建约束排除‘D/...vendor/pkg包’”中所有的GO文件

解决方案: 方案一:没生效 go - 构建约束排除所有 Go 文件 - IT工具网 go modules - build constraints exclude all Go files in - Stack Overflow 方案二:生效,手动初始化创建一个目录 后续再研究原因,有明白的大…

边缘智能模型训练、推理的关键技术

目录 模型推理边缘智能模型推理的关键指标延迟(Latency)准确性(Accuracy)能效(Energy)隐私(Privacy)通讯/计算开销(Comm/comp Overhead) 关键技术模型压缩&am…

node插件MongoDB(三)—— 库mongoose 的使用和数据类型(一)

前言 提示:使用mongoose 的前提是你安装了node和 MongoDB。 mongoose 官网文档:http://mongoosejs.net/docs/index.html 文章目录 前言一、安装二、基本使用1. 打开bin目录的mongod.exe文件2. 基本使用的代码(连接mongodb 服务)3.…

LeetCode算法题解(回溯,难点)|LeetCode37. 解数独

LeetCode37. 解数独 题目链接:37. 解数独 题目描述: 编写一个程序,通过填充空格来解决数独问题。 数独的解法需 遵循如下规则: 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分…

【C++ 学习 ㉟】- 异常详解

目录 一、C 异常处理的基本语法 1.1 - 抛出异常 1.2 - 检测和捕获异常 二、在函数调用链中异常栈展开的匹配原则 三、异常重新抛出 四、异常规范 五、C 标准异常体系 程序的错误大致可以分为以下三种: 语法错误:在编译和链接阶段就能发现&#xf…

<蓝桥杯软件赛>零基础备赛20周--第5周--杂题-2

报名明年4月蓝桥杯软件赛的同学们,如果你是大一零基础,目前懵懂中,不知该怎么办,可以看看本博客系列:备赛20周合集 20周的完整安排请点击:20周计划 每周发1个博客,共20周(读者可以按…

Java,多线程,线程的两种创建方式

首先是多线程的一些相关概念: 相关概念: 程序(program):为完成特定任务,用某种语言编写的一组指令的集合。即指一段静态(指不在执行中)的代码。 进程(process&#xf…

Qt QTableWidget表格的宽度

默认值 QTableWIdget的表格宽度默认是一个给定值,可以手动调整每列的宽度,也不填满父窗口 MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) {this->resize(800,600);QStringList contents{"11","111111111111",&…

聊聊模板引擎<Template engine>

模板引擎是什么 模板引擎是一种用于生成动态内容的工具,通常用于Web开发中。它能够将静态的模板文件和动态数据结合起来,生成最终的HTML、XML或其他文档类型。模板引擎通过向模板文件中插入变量、条件语句、循环结构等控制语句,从而实现根据…

操作系统:输入输出管理(一)系统概述与设备独立性软件

一战成硕 5.1 I/O系统概述5.1.1 I/O设备5.1.2 I/O控制方式5.1.3 I/O软件层次结构5.1.4 应用程序的I/O接口 5.2 设备独立性软件5.2.1 与设备无关的软件5.2.2 高速缓存与缓冲区5.2.3 设备分配与回收5.2.4 spooling技术(假脱机技术) 5.1 I/O系统概述 5.1.1…

一分钟秒懂人工智能对齐

文章目录 1.什么是人工智能对齐2.为什么要研究人工智能对齐3.人工智能对齐的常见方法 1.什么是人工智能对齐 人工智能对齐(AI Alignment)指让人工智能的行为符合人的意图和价值观。 人工智能系统可能会出现“不对齐”(misalign)…

【EI会议征稿】JPCS独立出版-第五届新材料与清洁能源国际学术会议(ICAMCE 2024)

JPCS独立出版-第五届新材料与清洁能源国际学术会议(ICAMCE 2024) 2024 5th International Conference on Advanced Material and Clean Energy 第五届新材料与清洁能源国际学术会议(ICAMCE 2024)将于2024年2月23-25日在中国▪长沙…

电机应用-无刷直流电机

无刷直流电机 无刷直流电机(Brushless Dirent Current Motor,简称BLDCM)由电动机主体和驱动器组成,无电刷和无换向器,是除了有刷电机外用得最多的一种电机。 无刷直流电机不使用机械的电刷装置,采用方波自控…

带你一分钟看懂 “kubernetes”

目录 什么是 Kubernetes Kubernetes 概述 为什么需要 Kubernetes,它能做什么? 什么是 Kubernetes 从官方网站上可以看到,它是一个工业级的容器编排平台。Kubernetes 这个单词是希腊语,它的中文翻译是“舵手”或者“飞行员”。在…

NFT Insider112:Gucci Cosmos LAND亮相 The Sandbox,和YGG一起探索Web3增长新方式

引言:NFT Insider由NFT收藏组织WHALE Members(https://twitter.com/WHALEMembers)、BeepCrypto(https://twitter.com/beep_crypto)联合出品,浓缩每周NFT新闻,为大家带来关于NFT最全面、最新鲜、最有价值的讯息。每期周…

0基础制作产品图册的干货,一个网站即可

很多朋友想要制作产品图册,但是不知道如何入手,其实制作产品图册并不难,一个网站就可以搞定。下面就为大家分享一些干货,帮助大家快速入门。 首先,我们需要选择一个合适的网站。比如FLBOOK在线制作电子杂志平台。这个网…