目录
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(