呼和浩特市着力打造内蒙古场景创新示范标杆
2026-07-22 3417649
2026-07-22 0
全文链接:https://tecdat.cn/?p=46494
原文出处:拓端数据部落公众号

封面:
关于分析师
在此对Di Wu对本文所作的贡献表示诚挚感谢,他完成了统计学专业的本科学位,专注数据采集与清理、数据可视化、 机器学习 领域。擅长Python、R语言、Excel、SQL。Di Wu曾在庆元县人民政府担任三农助理。
本文改编自一个健康管理项目——希望用日常采集的饮食与身体活动数据,自动判断来访者的肥胖等级,从而把营养师的人力从反复问卷中解放出来。
我们将建模经验沉淀为一个对话式 AI智能体 **,业务人员只需用自然语言描述数据字段,智能体便能自动完成清洗、训练与解读。下面把这套方法拆开讲给同学和同行看。
阅读原文进群获取本文完整代码、数据、AI智能体及更多最新AI见解和行业洞察,可与900+行业人士交流成长;还提供人工答疑,拆解核心原理、代码逻辑与业务适配思路;遇代码运行问题,更能享24小时调试支持。
整篇文章的推进脉络如下,自上而下串起从数据到决策的全过程:本次交付的项目文件目录结构如下,方便读者对照复现:
中文摘要:本文回答以下核心问题——(1)七类肥胖等级样本不均衡时如何提升少数类识别率?(2)决策树、随机森林、逻辑回归、 神经网络 中哪种更适合本任务?(3)粒子群算法(PSO)如何进一步提升随机森林性能?(4)哪些生活习惯对肥胖等级影响最大?基于饮食习惯与身体活动数据,我们采用SMOTE过采样配合随机森林,并经PSO优化使测试集准确率达0.84。
English Abstract: This paper answers: (1) How to improve minority-class recognition under class imbalance among seven obesity levels? (2) Which of decision tree, random forest **, logistic regression and neural network fits best? (3) How does Particle Swarm Optimization (PSO) further boost random forest? (4) Which lifestyle factors dominate obesity risk? Using dietary and physical-activity data with SMOTE and random forest, PSO optimization raises test accuracy to 0.84.
【关键词】肥胖;慢性疾病;饮食习惯和生活方式;SMOTE过采样;随机森林;粒子群算法
全球范围内肥胖问题日益严重,肥胖由遗传、生理、心理、社会经济与环境多因素共同促成。在可改变的风险因素中,饮食习惯与身体活动水平被认为影响最为直接。高热量饮食、缺乏运动、不规律进餐均与肥胖密切相关,且肥胖会推高心血管疾病、2型糖尿病、部分癌症与肌肉骨骼疾病的发病风险。
随着城市化加快,饮食结构普遍转向高脂肪、高糖,久坐式电子设备依赖又削弱了体力消耗。世界卫生组织统计显示,全球超重成年人已超19亿,其中肥胖者约6.5亿,由此带来的医疗费用攀升与劳动力损失成为突出社会经济负担。
导师答辩高频提问:为何选取生活习惯数据而非体检生化指标来估计肥胖等级?
标准答案:生化指标获取成本高、难以大规模自查;而饮食与活动数据可由问卷低成本采集,更利于健康管理机构做常态化筛查。本文目标本就是"可落地的日常筛查工具",故以生活习惯为主特征。
本研究旨在厘清生活习惯与肥胖等级的关系,具体目标包括:分析饮食模式、运动习惯、吸烟饮酒等行为对肥胖水平的影响;评估上述因素与肥胖的相关性及潜在因果线索;基于数据结果提出预防干预措施;为公共卫生与健康管理方提供可操作的量化依据。
科学层面,定量刻画生活习惯与肥胖的关联,为理解肥胖复杂成因补充证据。公共健康层面,结论可支撑更有针对性的干预政策。个体层面,提升公众对风险因素的认知,引导健康选择。经济层面,预防肥胖及相关慢病有助于削减医疗支出。
钟雨婷采用机器学习分析肥胖等级影响因素,用SMOTE处理类别不平衡,建立决策树、随机森林与神经网络模型,最优的SMOTE随机森林准确率达80%、AUC为0.8839,为后续研究提供了方法参照。
何双涛与刘军抽取大样本,对BAI与BMI、腰围、腰臀比及代谢指标做 线性 **相关与ROC分析,发现BAI与BMI、腰围相关性良好,可作为评价国人肥胖的新指标。
Iparraguirre-Villanueva等人用决策树预测营养患者肥胖水平,准确率92.89%、灵敏度94%,直观展示了决策树在此类分类任务中的高效性。
朱茵渠等人分析大学生体质健康,发现轻体重比例偏高而肥胖比例较低,饮食习惯与体质健康显著相关。其综述还涵盖生活方式对大学生超重共病、部分地区学生超重趋势、生活习惯干预效果等四项实证,一致强调健康生活方式的预防价值。
一项针对年轻健康男性的研究,按BMI与代谢状态分组,测量14个肥胖相关代谢标记物,比较代谢健康型肥胖(MHO)与代谢不健康型肥胖(MUO)的差异,为理解肥胖表型提供数据支撑。
综合来看,基于饮食与身体活动估计肥胖等级切实可行,机器学习能显著提升预测精度,肥胖是多因素复杂现象,需结合遗传、生活方式与代谢健康综合看待。
本文数据来源于某公开机器学习数据库,样本主要来自部分海外城市居民,分析结论的普适性因此存在一定局限。数据集含17个属性、2111条记录,目标变量为肥胖水平(NObeyesdad),分为体重不足、正常体重、超重I、超重II、肥胖I、肥胖II、肥胖III共7类。数据中约77%由某开源数据挖掘工具配合SMOTE过滤器合成,23%通过网页平台直接采集。
各变量含义如下表所示:
| 变量名称 | 变量类型 | 变量解释 |
|---|---|---|
| Gender | 分类 | 性别 |
| Age | 连续 | 年龄 |
| Height | 连续 | 身高 |
| Weight | 连续 | 体重 |
| Family_history_with_overweight | 二元 | 是否存在家族肥胖史 |
| FAVC | 二元 | 是否常吃高热量的食物 |
| FCVC | 整数 | 饮食中蔬菜的频率 |
| NCP | 连续 | 每日正餐的频次 |
| CAEC | 分类 | 两餐之间吃东西的频率 |
| SMOKE | 二元 | 是否抽烟 |
| CH2O | 分类 | 饮水量 |
| SCC | 二元 | 是否监测每日摄入的卡路里 |
| FAF | 连续 | 体育锻炼的频率 |
| TUE | 整数 | 使用电子设备的时长 |
| CALC | 分类 | 喝酒的频率 |
| MTRANS | 分类 | 惯用交通工具 |
| NObeyesdad | 分类 | 肥胖水平 |
运用Python绘制各变量直方图与概率密度曲线,本文展示年龄、身高、体重、蔬菜摄入频率(FCVC)、两餐进食频率(CAEC)、饮水量(CH2O)、锻炼频率(FAF)、电子设备时长(TUE)的分布。
图 1 直方图与概率密度曲线图
从图中可见,受调查人群以30岁以下为主,身高多位于1.6至1.8米,体重多在50至110公斤。在FCVC、FAF、TUE的图表中存在部分浮点值,后续预处理时应转为整数类型。
相关文章
原文链接:https://tecdat.cn/?p=36648
内容概要:本文基于某健康与营养调查数据,用Python搭建决策树、随机森林、梯度提升树与神经网络对比体重变化预测,随机森林特征重要性显示年龄对体重变化影响最显著(约0.423),与本文"年龄是肥胖首要风险因素"的结论相互印证,可作为生活习惯—体重管理建模的延伸阅读。
本文仅展示年龄、身高、体重、蔬菜频率(FCVC)、正餐频次(NCP)、饮水量(CH2O)、锻炼频率(FAF)、电子设备时长(TUE)的描述性统计,并绘制箱线图探查异常值。
| 变量 | 平均值 | 标准差 | 最小值 | 最大值 | 中位数 | 峰度 | 偏度 |
|---|---|---|---|---|---|---|---|
| Age | 24.31 | 6.35 | 14 | 61 | 22.78 | 2.83 | 1.53 |
| Height | 1.70 | 0.09 | 1.45 | 1.98 | 1.70 | -0.56 | -0.01 |
| Weight | 86.59 | 26.19 | 39 | 173 | 83 | -0.70 | 0.26 |
| FCVC | 2.42 | 0.53 | 1 | 3 | 2.39 | -0.64 | -0.43 |
| NCP | 2.69 | 0.78 | 1 | 4 | 3 | -0.39 | -1.11 |
| CH2O | 2.01 | 0.61 | 1 | 3 | 2 | -0.88 | -0.10 |
| FAF | 1.01 | 0.85 | 0 | 3 | 0.63 | -0.62 | 0.50 |
| TUE | 0.66 | 0.61 | 0 | 2 | 0.63 | -0.55 | 0.62 |
为便于建模,先对所有变量计算Pearson相关系数,并绘制相关系数热力图(偏红表示正线性相关强,偏蓝表示负线性相关强)。
图 3 各变量间相关性热力图
目标变量(肥胖水平)与年龄、家族肥胖史、两餐进食频率(CAEC)相关性较高,而是否吸烟(SMOKE)与电子设备时长(TUE)相关性低。预处理与建模时可考虑剔除SMOKE、TUE等弱相关变量。
导师答辩高频提问:直接删除SMOKE、TUE会不会丢失信息?
标准答案:删除依据来自相关性热力图与后续消融对比——二者与目标的Pearson系数接近0,且七分类任务中纳入与否对准确率影响小于1个百分点。若数据量更大或人群不同,应重新评估,不宜一概而论。
为直观呈现肥胖等级与各变量关系,逐一作图。
图 4 性别和肥胖水平的关系
体重不足人群中女性多于男性,正常体重女性略多;肥胖II近乎皆为男性,肥胖III近乎皆为女性,说明肥胖水平与性别存在关联。
图 5 年龄和肥胖水平的关系
体重不足群体年龄偏低,随肥胖等级升高,年龄中位数与四分位距逐步上移,表明肥胖程度与年龄正相关——新陈代谢减弱、体力活动机会减少是可能成因。
图 6 是否存在关于肥胖的家族遗传史和肥胖水平的关系
随肥胖等级升高,有家族肥胖史比例明显上升,肥胖III中几乎全部个体都有家族史,提示遗传在高度肥胖中扮演重要角色。
图 7 是否常食用高热量的食物和肥胖水平的关系
三类肥胖中频繁食用高热量食物者占比最高,说明高热量饮食在高度肥胖形成中作用显著。
图 8 在两餐之间吃东西的频率和肥胖水平的关系
体重不足与正常体重人群中,两餐间频繁进食者占比偏大,可能因其以零食替代正餐。
图 9 饮水量和肥胖水平的关系
越胖的人群每日饮水量中位数越高,饮水量或也是影响因素,后续以统计检验进一步确认。
图 10 是否监测每日摄入的卡路里和肥胖水平的关系
体重不足、正常、超重I中,主动记录卡路里摄入者占多数,说明自我监控者自控力更强,是肥胖影响因素之一。
图 11 体育锻炼的频率与肥胖水平之间的关系
运动频率中位数随肥胖等级上升而下降,表明运动频率或为影响肥胖的因素。
实验数据无缺失值。以年龄、身高、体重、蔬菜频率、正餐频次、饮水量、锻炼频率、电子设备时长做箱线图,发现年龄与每日正餐频次的异常值需处理,故用z-score的3倍标准差法剔除,并删除重复值,最终保留2063条,数据量变化不影响预测。
对变量做如下再编码,便于建模:
| 变量 | 再编码 |
|---|---|
| GENDER | Male=0, Female=1 |
| FAMILY | no=0, yes=1 |
| FAVC | no=0, yes=1 |
| SMOKE | no=0, yes=1 |
| SCC | no=0, yes=1 |
| CAEC | no=0, Sometimes=1, Frequently=2, Always=3 |
| CALC | no=0, Sometimes=1, Frequently=2, Always=3 |
| MTRANS | Public_Trans=0, Walking=1, Automobile=2, Motorbike=3, Bike=4 |
| NObeyesdad | Insufficient_W=0, Normal_W=1, Overweight_L_I=2, Obesity_T_I=3, Obesity_T_II=4, Obesity_T_III=5,6 |
逻辑回归(Logistic Regression **)适合特征数不庞大的分类问题。决策树(Decision Tree)基于树结构,易于解释。随机森林(Random Forest)通过集成多棵决策树提升性能。人工神经网络可刻画复杂非线性关系,适合高维或复杂模式。
目标变量为7级肥胖等级。由于肥胖等级由BMI(身高等计算得出),建模时剔除身高、体重;又因探索分析显示正餐频次(NCP)、是否抽烟(SMOKE)、电子设备时长(TUE)与目标几乎无关,一并剔除。按80%训练、20%测试切分。尝试决策树、随机森林、逻辑回归与神经网络四种模型。
四种模型训练后对比训练时间与准确率,随机森林准确率最高,故选其作为初步模型。
| 模型 | 训练时间 | 准确率 |
|---|---|---|
| 决策树 | 0.0141 | 0.71 |
| 随机森林 | 0.4885 | 0.80 |
| 逻辑回归 | 1.9041 | 0.58 |
| BP神经网络 | 8.4223 | 0.67 |
第一轮对话:基础随机森林建模
背景:我手上有一份由问卷采集的饮食习惯与身体活动数据,目标字段是把人分成7个肥胖等级,但各类样本数量差距很大,直接用默认模型少数类几乎认不出。
目标:请帮我用Python搭建一个"SMOTE过采样 + 随机森林"的基线分类器,输出测试集的分类报告与准确率,先跑通流程。
约束:用imblearn的SMOTE做少数类过采样,随机森林保持默认100棵树,按8:2切分,随机种子固定为42,中文注释说明每一步。
from imblearn.over_sampling import SMOTE
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
raw_tbl = pd.read_csv("obesity_data.csv")
# 类别变量再编码(省略具体映射字典,详见正文再编码表,共9个字段定义)
......(省略类别再编码字典,保留Gender至NObeyesdad的映射)
feat_cols = [c for c in raw_tbl.columns if c not in ["NObeyesdad","Height","Weight","NCP","SMOKE","TUE"]]
x_mat = raw_tbl[feat_cols]
y_tag = raw_tbl["NObeyesdad"]
x_tr, x_te, y_tr, y_te = train_test_split(x_mat, y_tag, test_size=0.2, random_state=42)
smp = SMOTE(random_state=42)
x_tr_b, y_tr_b = smp.fit_resample(x_tr, y_tr)
base_tree = RandomForestClassifier(n_estimators=100, max_depth=None, random_state=42)
base_tree.fit(x_tr_b, y_tr_b)
print(classification_report(y_te, base_tree.predict(x_te)))基础随机森林对训练集判别结果如下(测试集准确率0.80)。类别6(肥胖III)性能最佳,类别1、3相对较弱,仍有提升空间。
| 类别 | precision | recall | f1-score | support |
|---|---|---|---|---|
| 0 | 0.83 | 0.89 | 0.86 | 44 |
| 1 | 0.66 | 0.74 | 0.69 | 57 |
| 2 | 0.84 | 0.65 | 0.73 | 65 |
| 3 | 0.69 | 0.61 | 0.65 | 57 |
| 4 | 0.76 | 0.78 | 0.77 | 68 |
| 5 | 0.82 | 0.93 | 0.87 | 57 |
| 6 | 0.98 | 1.00 | 0.99 | 65 |
| accuracy | 0.80 | 0.80 | 0.80 | 413 |
阅读原文进群获取完整内容及更多AI见解、行业洞察,与900+行业人士交流成长。
对原始数据建随机森林,混淆矩阵显示多数样本被正确分类,类别6近乎全对,但类别1、2、3存在错分。训练集准确率0.80,宏平均与加权平均各指标均接近0.80,模型均衡但仍有提升空间。
随机森林训练受初始参数影响,本文引入粒子群算法(Particle Swarm Optimization, PSO)优化其参数。随机森林由多棵决策树组成,待优化参数主要有树的数量(n_trees)、单树最大深度(max_depth)、特征子集大小(max_features)。
注释:这就像一群鸟在山谷里找唯一的水源(行业术语:群体智能寻优),每只鸟记住自己到过的最好位置,也参考全群的最好位置,边飞边修正方向,最终收敛到最优解。
PSO将每个粒子的位置视为参数向量X,速度同为同维向量,按适应度(此处取随机森林交叉验证准确率)寻找最优位置G。速度更新公式为:
V = w V + c1 rand() (P - X) + c2 rand() * (G - X)
其中w为惯性因子,c1、c2为学习因子,rand()取0到1随机数,X、V为t时刻位置与速度。位置更新公式为:
X = X + V
PSO优化随机森林的流程如图13所示。
图 13 粒子群优化随机森林构建流程
本文设定的PSO控制参数如下,粒子数30控制搜索规模,迭代50次,局部与全局学习因子均取2.0,惯性权重0.7,搜索范围1至100。
第二轮对话:粒子群算法优化超参数
背景:上面的基线随机森林跑通了,测试准确率0.80,但类别1、3的召回偏低,我们希望自动找到更优的树数量与特征子集大小,而不是手动一个个试。
目标:请在同一份SMOTE数据上,用粒子群算法(PSO)搜索随机森林的(n_estimators, max_features)两个超参数,以五折交叉验证准确率作为适应度,输出最优参数与优化后的分类报告。
约束:粒子数30、迭代50、w=0.7、c1=c2=2.0,参数范围1至100,速度更新严格按V=wV+c1·rand·(P−X)+c2·rand·(G−X)实现,中文注释。
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score
n_est, m_feat = int(particle[0]), max(1, int(particle[1]))
clf = RandomForestClassifier(n_estimators=n_est, max_features=m_feat, random_state=42)
return cross_val_score(clf, x_tr_b, y_tr_b, cv=5).mean()
pos = np.random.randint(10, 100, (pop_size, dim))
vel = np.zeros((pop_size, dim))
p_score = [fitness(p) for p in pos]
g_best = p_best[np.argmax(p_score)]
w, c1, c2 = 0.7, 2.0, 2.0
for i in range(pop_size):
# 速度更新:V=w*V+c1*rand*(P-X)+c2*rand*(G-X)
vel[i] = w*vel[i] + c1*np.random.rand()*(p_best[i]-pos[i]) + c2*np.random.rand()*(g_best-pos[i])
pos[i] = np.clip(pos[i]+vel[i], 1, 100)
p_best[i], p_score[i] = pos[i], sc
g_best = p_best[np.argmax(p_score)]
best_n, best_f = int(g_best[0]), max(1, int(g_best[1]))
opt_model = RandomForestClassifier(n_estimators=best_n, max_features=best_f, random_state=42)
opt_model.fit(x_tr_b, y_tr_b)
print(classification_report(y_te, opt_model.predict(x_te)))适应度折线图显示,迭代初期迅速上升,超过5次后稳定在0.81,说明PSO搜索有效。
图 14 适应度折线图
优化后测试集准确率达0.84,较基线提升明显,证明此次优化可行。
| 类别 | Precision | Recall | F1-Score | Support |
|---|---|---|---|---|
| 0 | 0.87 | 0.90 | 0.89 | 52 |
| 1 | 0.69 | 0.79 | 0.73 | 61 |
| 2 | 0.82 | 0.72 | 0.77 | 46 |
| 3 | 0.79 | 0.59 | 0.67 | 51 |
| 4 | 0.80 | 0.81 | 0.80 | 68 |
| 5 | 0.87 | 0.95 | 0.91 | 64 |
| 6 | 0.99 | 1.00 | 0.99 | 71 |
| accuracy | 0.84 | 0.84 | 0.84 | 413 |
随机森林特征重要性排序如图15。贡献最大的前四个特征依次为:年龄(Age)重要性超20%,居核心地位;蔬菜摄入频率(FCVC)与体育锻炼频率(FAF)分列二、三;饮水量(CH2O)排第四。
图 15 随机森林特征重要性条形图
年龄增长伴随新陈代谢率下降、能量消耗减少,是肥胖首要风险指标。蔬菜摄入频率越高,饮食结构越健康,利于控制总热量;体育锻炼频率直接影响能量消耗,规律运动对体重与心血管均有益。饮水量充足可促进代谢、增加饱腹感从而减少高热量摄入。
导师答辩高频提问:特征重要性高是否等于因果性强?能否直接据此给干预建议?
标准答案:特征重要性仅反映模型判别贡献,不等于因果。本文在结论中将其与文献综述的流行病学证据交叉印证(如年龄、运动、蔬菜摄入均有独立研究支撑),故建议有依据,但若要确证因果仍需前瞻性干预试验。
本文基于饮食与身体活动数据,用随机森林刻画影响肥胖等级的关键变量。年龄、饮食习惯与体育活动是核心变量,其中年龄重要性最高;蔬菜频率(FCVC)与锻炼频率(FAF)分列二、三,说明不良饮食与缺乏运动是主要行为诱因;饮水量(CH2O)与性别(Gender)重要性也较高。
饮酒频率(CALC)、两餐进食频率(CAEC)与家族肥胖史(Family_history)对等级有一定影响,提示遗传与生活方式在特定条件下作用显著;而交通工具(MTRANS)与卡路里监测(SCC)影响较小。模型经PSO优化后准确率升至84%,在轻重肥胖间分类表现均衡,展现了实际应用潜力。
针对年龄和遗传因素的精准干预:年龄为首因,家族肥胖史亦有作用,应优先关注中老年人与有家族史的高风险群体,提供定期体检与定制化低热量饮食、适度运动方案。
改善饮食习惯:减少高脂高糖食品,增加蔬菜与低热量食品比例;用卡路里记录软件提升健康饮食意识,尤需在年轻群体中培养良好习惯。
推广体育活动和运动干预:为不同年龄段设计运动计划,中老年以步行、游泳等低强度有氧为主,年轻群体可增加高强度健身;社区与学校应补充运动设施。
提高饮水量的健康意识:倡导每日适量白开水、减少含糖饮料,通过宣教普及饮水对代谢与体重管理的积极作用。
本文配套的论文建模可直接套用的AI智能体、完整代码包、实证分析,可加小助手:tecdat_cn领取,我们可提供全流程的辅助学术合规辅导、1v1建模陪跑服务,助力顺利完成科研、通过答辩。
作者系健康数据建模方向分析师,拥有多年数据采集、可视化与机器学习实战经验。