基于线性回归根据饮食习惯和身体状况估计肥胖水平

目录

  • 1. 作者介绍
  • 2.饮食习惯与身体状况数据集介绍
  • 3.实验步骤
    • 3.1 数据分析
    • 3.2 可视化处理数据
    • 3.3 导入线性回归模型进行训练
    • 3.4 预测结果
    • 3.5 完整代码
      • 3.5.1 数据分析
      • 3.5.2 模型评估
  • 参考文献


1. 作者介绍

刘欢,女,西安工程大学电子信息学院,2023级研究生
研究方向:机器视觉与人工智能
电子邮件:2768691353@qq.com

孙思伟,男,西安工程大学电子信息学院,2023级研究生
研究方向:深度强化学习与人工智能
电子邮件:sunsiwei0109@163.com

2.饮食习惯与身体状况数据集介绍

该数据集来自于UCL机器学习知识库,数据集包括墨西哥、秘鲁和哥伦比亚等国基于饮食习惯和身体状况的个体肥胖水平估计数据。数据包含17个属性和2111条记录,这些记录标有类变量肥胖等级,允许使用体重不足、正常体重、超重一级、超重二级、肥胖一级、肥胖二级和肥胖三级的值对数据进行分类。77%的数据是使用Weka工具和SMOTE过滤器综合生成的,23%的数据是通过网络平台直接从用户那里收集的。

属性含义取值
Gender性别Female、Male
Age年龄整数取值
Height身高小数 (m)
Weight体重整数取值 (kg)
family_history_with_overweight家庭肥胖历史Yes、No
FAVC经常食用高热量食物Yes、No
FCVC食用蔬菜的频率No (0) 、 Sometimes(1) 、 Frequently(2) 、 Always(3)
NCP主餐次数1-2、3、>3
CAEC两餐之间食用食物No、Sometimes、Frequently、Always
SMOKE是否抽烟Yes、No
CH2O每日饮水量1 (a little) 、 2 (1-2L) 、 3 (>2L)
CALC饮酒No、Sometimes、Frequently、Always
SCC卡路里消耗监测Yes、No
FAF身体活动频率0 (No) 、 1 (1-2天) 、 2 (2-4天) 、 3 (4-5天)
TUE每日坐着的时间0 (0-2h) 、 1 (3-5h) 、 2 (>5h)
MTRANS使用的交通工具Automobile、Motorbike、Bike、Public、Transportation、Walking
NObeyesdad肥胖等级Based on the WHO Classification

Gender、Age、Family_history_with_overweight、FAVC、FCVC、NCP、CAEC、SMOKE、CH2O、CALC、SCC、FAF、TUE作为目标特征,Height、Weight作为体重指数(MBI)的特征,NObeyesdad作为标签,为了确定肥胖水平,使用世界卫生组织提供的表对基于体重指数分析的数据进行了正确分类,如表1所示,得出每个个体的肥胖等级。
体重指数(MBI)计算公式:
在这里插入图片描述
世界卫生组织肥胖等级表

3.实验步骤

3.1 数据分析

首先导入数据集,对数据进行分析。

# 加载数据
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np# 查看前五条数据
data = pd.read_csv('dataset.csv')
data.head()

根据程序输出结果,查看数据集数据样本总数和特征变量个数;以及通过数据集前5条数据,查看17个特征变量数据情况。
在这里插入图片描述然后,检查每列缺失值数量。

# 检查每一列缺失值数量
data.isnull().sum()

在这里插入图片描述

3.2 可视化处理数据

绘制直方图(共17张),并将异常数据进行剔除。

在这里插入图片描述

在这里插入图片描述

对自变量进行特征分析,并绘制散点图(共17张)。
在这里插入图片描述绘制热力图,可视化DataFrame中各列之间的相关性。
在这里插入图片描述

3.3 导入线性回归模型进行训练

接着通过上述直方图、散点图和热力图分析,对异常数据进行处理,完成数据的预处理,最后通过导入线性回归模型搭建饮食习惯与身体状况预测模型。

# 训练线性回归模型
LR1 = LinearRegression()
LR1.fit(X, y)# 预测值
y_predict_1 = LR1.predict(X)# 模型评估
mean_squared_error_1 = mean_squared_error(y, y_predict_1)
r2_score_1 = r2_score(y, y_predict_1)
print("Mean Squared Error:", mean_squared_error_1)
print("R^2 Score:", r2_score_1)

在这里插入图片描述

3.4 预测结果

在这里插入图片描述
在这里插入图片描述

由结果图可以看出,均方误差(MSE)为 0.6537,R2 分数为 0.83。这表明模型的预测效果相对较好,R^2 分数接近于 1,说明模型能够较好地拟合数据,并且均方误差较小,表示模型的预测值与真实值之间的误差较小。

3.5 完整代码

3.5.1 数据分析

# 加载数据
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np# 查看前五条数据
data = pd.read_csv('dataset.csv')
data.head()# 检查每一列缺失值数量
data.isnull().sum()plt.rcParams['font.family'] = ['sans-serif']    #显示中文标签
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号fig,ax = plt.subplots(figsize=(6,3), dpi=120)plt.hist(x = data.Age, # 指定绘图数据bins = 15, # 指定直方图中条块的个数color = 'skyblue', # 指定直方图的填充色edgecolor = 'black' # 指定直方图的边框色)
# 添加x轴和y轴标签
plt.xlabel('Age')
plt.ylabel('频数')
# 添加标题
plt.title('年龄分布')plt.title('年龄分布')
#%%
plt.rcParams['font.family'] = ['sans-serif']    #显示中文标签
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号fig,ax = plt.subplots(figsize=(6,3), dpi=120)plt.hist(x = data.Height, # 指定绘图数据bins = 15, # 指定直方图中条块的个数color = 'skyblue', # 指定直方图的填充色edgecolor = 'black' # 指定直方图的边框色)
# 添加x轴和y轴标签
plt.xlabel('Height')
plt.ylabel('频数')
# 添加标题
plt.title('身高分布')plt.title('身高分布')
#%%
%matplotlib inline
from matplotlib import pyplot as plt
fig = plt.figure(figsize=(10,10))
fig1 =plt.subplot(231)
plt.scatter(data.loc[:,'Weight'],data.loc[:,'NObeyesdad'])
plt.title('Weight VS Obesity')%matplotlib inline
from matplotlib import pyplot as plt
fig = plt.figure(figsize=(10,10))
fig1 =plt.subplot(231)
plt.scatter(data.loc[:,'Age'],data.loc[:,'NObeyesdad'])
plt.title('Age VS Obesity')import seaborn as snsplt.figure(figsize=(24,16))
ax = sns.heatmap(data.corr(), square=True, annot=True, fmt='.2f')
ax.set_xticklabels(ax.get_xticklabels(), rotation=90)  
bottom, top = ax.get_ylim()
ax.set_ylim(bottom + 0.5, top - 0.5)  

3.5.2 模型评估

from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import seaborn as sns# 加载数据
data = pd.read_csv('dataset.csv')# 选择特征变量和目标变量
X = data[['Weight']]  # 特征变量,选择 'CH2O' 列作为输入变量
y = data['NObeyesdad']  # 目标变量,选择 'NObeyesdad' 列作为目标变量# 将目标变量转换为数值型,使用 Label Encoding
class_mapping = {'Insufficient_Weight': 0, 'Normal_Weight': 1, 'Overweight_Level_I': 2, 'Overweight_Level_II': 3, 'Obesity_Type_I': 4, 'Obesity_Type_II': 5, 'Obesity_Type_III': 6}
y = y.map(class_mapping)
X = np.array(X).reshape(-1,1)# 训练线性回归模型
LR1 = LinearRegression()
LR1.fit(X, y)# 预测值
y_predict_1 = LR1.predict(X)# 模型评估
mean_squared_error_1 = mean_squared_error(y, y_predict_1)
r2_score_1 = r2_score(y, y_predict_1)
print("Mean Squared Error:", mean_squared_error_1)
print("R^2 Score:", r2_score_1)# 绘制真实值和预测值的对比图
fig = plt.figure(figsize=(8,5))
plt.scatter(X, y)
plt.plot(X, y_predict_1, color='red')  # 真实值和预测值的对比曲线
#plt.title('Comparison between True and Predicted Values')
plt.xlabel('Input')  # 横坐标标签
plt.ylabel('NObeyesdad')  # 纵坐标标签
plt.show()

参考文献

[1]饮食习惯与身体状况数据集

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

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

相关文章

哈希表(Hash table)

哈希表(Hash table),也称为散列表,是一种根据关键码值(Key value)直接进行访问的数据结构。它通过散列函数(Hash function)将关键码值映射到表中的一个位置,以此来访问记录,从而加快查找的速度。以下是关于哈希表的详细解释: 基本概念 散列函数:将关键码值映射到表…

10 -每台机器的进程平均运行时间(高频 SQL 50 题基础版)

10 - 每台机器的进程平均运行时间 -- sum(if(activity_type end,timestamp ,-timestamp )) -- 如果activity_type为“end”,值为timestamp,为“start” 为-timestamp,所有数相加end-start -- count(distinct process_id),获取同一机器有几个进行id -- r…

python的sql解析库-sqlparse

内容目录 一、基本方法:1.parse(sql)2.format(sql)3.split()4.parsestream() 二、Token三、其他类型四、案例: 提取所有查询的字段和表名 sqlparse 是一个 Python 库,是一个用于 Python 的非验证 SQL 解析器, 用于解析 SQL 语句并提供一个简单的 API 来访问解析后的…

Vue中如何获取dom元素?

在Vue中,通常我们不直接操作DOM元素,因为Vue是一个声明式渲染的框架,它鼓励我们使用数据驱动视图的方式来更新UI。然而,在某些情况下,你可能需要直接访问DOM元素。在这种情况下,你可以使用Vue的ref属性和$r…

k8s Pods漂移时间配置

默认为300秒 apiVersion: apps/v1 kind: Deployment metadata:name: my-test spec:replicas: 1selector:matchLabels:app: my-apptemplate:metadata:labels:app: my-appspec:containers:- name: my-containerimage: nginx:latestports:- containerPort: 80tolerations:- key: &…

C++语言学习(七)—— 继承、派生与多态(一)

目录 一、派生类的概念 1.1 定义派生类的语法格式 1.1.1 定义单继承派生类 1.1.2 定义多继承派生类 1.2 继承方式 二、公有继承 三、派生类的构造和析构 四、保护成员的引入 五、改造基类的成员函数 六、派生类与基类同名成员的访问方式 七、私有继承和保护继承 7.…

bug记录——报了一堆xtr1common和yvals_core.h的错误

现象 今天使用VisualStdio2022时&#xff0c;突然出现了这样严重的报错&#xff0c;看得我一头雾水&#xff0c;而且无法启动VisualStdio2022的调试。 原因 发现NULL没法直接使用时&#xff0c;跟着提示添加了如下的头文件。 #include<cstddef>&#xff0c;是C标准库的头…

代码随想录算法训练营Day61 | 总结和展望 | Python | 个人记录向

总结 感觉训练营说短不短&#xff0c;说长不长&#xff0c;没想到一下子就度过了60天的刷题之旅。训练营之前自己模糊地刷过代码随想录&#xff0c;主要是二叉树前面的章节二叉树的前一部分后面章节的前几题&#xff0c;能稍微应对面试。但是&#xff0c;我亟需对coding进行系…

Blog项目切换Markdown编辑器———LayUI弹出层弹出写在页面的内容导致的各种bug

【2024.5.24回顾】 1 问题描述(描述完自己解决了…) 正常情况 点击添加文章按钮后&#xff0c;弹出文章编辑界面&#xff0c;如果用富文本功能编辑&#xff0c;则一切正常。可以多次打开、关闭 Markdown 如果在弹出层中点击了切换编辑器按钮&#xff0c;会成功切换为markd…

使用chatgpt api快速分析pdf

需求背景 搞材料的兄弟经常要分析pdf&#xff0c;然后看到国外有产品是专门调用chatpdf来分析pdf的&#xff0c;所以就来问我能不能帮他也做一个出来。正好我有chatgpt的api&#xff0c;所以就研究了一下这玩意怎么弄。 需求分析 由于chatgpt是按字符算钱的&#xff0c;所以…

JDBC学习笔记(三)高级篇

一、JDBC 优化及工具类封装 1.1 现有问题 1.2 JDBC 工具类封装 V1.0 resources/db.properties配置文件&#xff1a; 工具类代码&#xff1a; 1.3 ThreadLocal 1.4 JDBC 工具类封装 V2.0 二、DAO封装及BaseDAO 工具类 2.1 DAO 概念 2.2 BaseDAO 概念 2.3 BaseDAO 搭建 2.4 Ba…

每天一个数据分析题(三百四十八)

理解业务分析模型能够更好的把握业务全局&#xff0c;以下属于分析模型中分类模型的是 A. RFM模型 B. 销售漏斗模型 C. 波士顿矩阵 D. 客户价值模型 数据分析认证考试介绍&#xff1a;点击进入 题目来源于CDA模拟题库 点击此处获取答案

Go 实现的命令行程序,可以通过参数来控制和消耗 CPU 占比。通常用于测试系统负载和性能。

说明 Go 实现的命令行程序&#xff0c;可以通过参数来控制和消耗 CPU 占比。通常用于测试系统负载和性能。 代码在下面 编译和运行 在终端中编译代码&#xff1a; go build 运行程序并传入 CPU 使用率参数&#xff0c;例如&#xff1a; ./tools_cpu_burner -p50代码解释 fla…

WPF前端:一个纯Xaml的水平导航栏

效果图&#xff1a; 代码&#xff1a; 1、样式代码&#xff0c;可以写在窗体资源处或者样式资源文件中 <Style x:Key"MenuRadioButtonStyle" TargetType"{x:Type RadioButton}"><Setter Property"FontSize" Value"16" />…

Always语句和assign的用法

Always语句 简介 always语句块从仿真0时刻开始执行其中的行为语句&#xff1b;最后一条执行完成后&#xff0c;再开始执行其中的第一条语句&#xff0c;如此往复循环&#xff0c;直到整个仿真结束。因此&#xff0c;always语句块常用于对数字电路中一组反复执行的活动进行建模…

【TensorFlow深度学习】RNN短时记忆缺陷与LSTM改进原理

RNN短时记忆缺陷与LSTM改进原理 RNN的局限与LSTM&#xff1a;短时记忆缺陷及其优化原理的深度解析RNN的STM问题剖析LSTM原理与改进LSTM代码实例结语 RNN的局限与LSTM&#xff1a;短时记忆缺陷及其优化原理的深度解析 在深度学习的征程中&#xff0c;循环神经网络&#xff08;R…

开源规则引擎LiteFlow项目应用实践

本文介绍基于开源规则引擎LiteFlow&#xff0c;如何开发规则设计器&#xff0c;在低代码平台中集成规则引擎&#xff0c;并在项目中实现应用的效果。由于低代码平台使用规则引擎实现了逻辑编排的需求&#xff0c;所以本文中的叫法为“逻辑设计”、“逻辑编排”、“逻辑流引擎”…

.NET IoC 容器(三)Autofac

目录 .NET IoC 容器&#xff08;三&#xff09;AutofacAutofacNuget 安装实现DI定义接口定义实现类依赖注入 注入方式构造函数注入 | 属性注入 | 方法注入注入实现 接口注册重复注册指定参数注册 生命周期默认生命周期单例生命周期每个周期范围一个生命周期 依赖配置Nuget配置文…

0基础学习区块链技术——推演猜想

在《0基础学习区块链技术——入门》一文中&#xff0c;我们结合可视化工具&#xff0c;直观地感受了下区块的结构&#xff0c;以及链式的前后关系。 本文我们将抛弃之前的知识&#xff0c;从0开始思考和推演&#xff0c;区块链技术可能是如何构思出来的。 去中心 在一般的思维…

回溯算法之组合总和2

题目&#xff1a; 给定一个候选人编号的集合 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意&#xff1a;解集不能包含重复的组合。 示例 1: 输入: candi…