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

2024-06-03 20:44

本文主要是介绍基于线性回归根据饮食习惯和身体状况估计肥胖水平,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 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.chinasem.cn/article/1028059

相关文章

线性因子模型 - 独立分量分析(ICA)篇

序言 线性因子模型是数据分析与机器学习中的一类重要模型,它们通过引入潜变量( latent variables \text{latent variables} latent variables)来更好地表征数据。其中,独立分量分析( ICA \text{ICA} ICA)作为线性因子模型的一种,以其独特的视角和广泛的应用领域而备受关注。 ICA \text{ICA} ICA旨在将观察到的复杂信号

✨机器学习笔记(二)—— 线性回归、代价函数、梯度下降

1️⃣线性回归(linear regression) f w , b ( x ) = w x + b f_{w,b}(x) = wx + b fw,b​(x)=wx+b 🎈A linear regression model predicting house prices: 如图是机器学习通过监督学习运用线性回归模型来预测房价的例子,当房屋大小为1250 f e e t 2 feet^

【高等代数笔记】线性空间(一到四)

3. 线性空间 令 K n : = { ( a 1 , a 2 , . . . , a n ) ∣ a i ∈ K , i = 1 , 2 , . . . , n } \textbf{K}^{n}:=\{(a_{1},a_{2},...,a_{n})|a_{i}\in\textbf{K},i=1,2,...,n\} Kn:={(a1​,a2​,...,an​)∣ai​∈K,i=1,2,...,n

用Python实现时间序列模型实战——Day 14: 向量自回归模型 (VAR) 与向量误差修正模型 (VECM)

一、学习内容 1. 向量自回归模型 (VAR) 的基本概念与应用 向量自回归模型 (VAR) 是多元时间序列分析中的一种模型,用于捕捉多个变量之间的相互依赖关系。与单变量自回归模型不同,VAR 模型将多个时间序列作为向量输入,同时对这些变量进行回归分析。 VAR 模型的一般形式为: 其中: ​ 是时间  的变量向量。 是常数向量。​ 是每个时间滞后的回归系数矩阵。​ 是误差项向量,假

数据集 3DPW-开源户外三维人体建模-姿态估计-人体关键点-人体mesh建模 >> DataBall

3DPW 3DPW-开源户外三维人体建模数据集-姿态估计-人体关键点-人体mesh建模 开源户外三维人体数据集 @inproceedings{vonMarcard2018, title = {Recovering Accurate 3D Human Pose in The Wild Using IMUs and a Moving Camera}, author = {von Marc

带头结点的线性链表的基本操作

持续了好久,终于有了这篇博客,链表的操作需要借助图像模型进行反复学习,这里尽可能的整理并记录下自己的思考,以备后面复习,和大家分享。需要说明的是,我们从实际应用角度出发重新定义了线性表。 一. 定义 从上一篇文章可以看到,由于链表在空间的合理利用上和插入、删除时不需要移动等优点,因此在很多场合下,它是线性表的首选存储结构。然而,它也存在某些实现的缺点,如求线性表的长度时不如顺序存储结构的

软考(计算机技术与软件专业技术资格(水平)考试)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。 月下飞天镜,云生结海楼。 ——《渡荆门送别》 信息系统项目管理师备考专栏 软考全称:计算机技术与软件专业技术资格(水平)考试 官网直达:中国计算机技术职业资格网 文章目录 软考介绍1.

风格控制水平创新高!南理工InstantX小红书发布CSGO:简单高效的端到端风格迁移框架

论文链接:https://arxiv.org/pdf/2408.16766 项目链接:https://csgo-gen.github.io/ 亮点直击 构建了一个专门用于风格迁移的数据集设计了一个简单但有效的端到端训练的风格迁移框架CSGO框架,以验证这个大规模数据集在风格迁移中的有益效果。引入了内容对齐评分(Content Alignment Score,简称CAS)来评估风格迁移

数据集 Ubody人体smplx三维建模mesh-姿态估计 >> DataBall

Ubody开源人体三维源数据集-smplx-三维建模-姿态估计 UBody:一个连接全身网格恢复和真实生活场景的上半身数据集,旨在拟合全身网格恢复任务与现实场景之间的差距。 UBody包含来自多人的现实场景的1051k张高质量图像,这些图像拥有2D全身关键点、3D SMPLX模型。 UBody由国际数字经济学院(IDEA)提供。 (UBody was used for mesh r

浙大数据结构:02-线性结构4 Pop Sequence

这道题我们采用数组来模拟堆栈和队列。 简单说一下大致思路,我们用栈来存1234.....,队列来存输入的一组数据,栈与队列进行匹配,相同就pop 机翻 1、条件准备 stk是栈,que是队列。 tt指向的是栈中下标,front指向队头,rear指向队尾。 初始化栈顶为0,队头为0,队尾为-1 #include<iostream>using namespace std;#defi