首页
看点啥
插画图片
首页 看点啥 Python和R开发SMOTE过采样随机森林RF与粒子群算法PSO融合模型实现肥胖等级预测|附AI智能体、代码和数据

Python和R开发SMOTE过采样随机森林RF与粒子群算法PSO融合模型实现肥胖等级预测|附AI智能体、代码和数据

2026-07-22 0

全文链接:https://tecdat.cn/?p=46494
原文出处:拓端数据部落公众号
 

Python、R开发SMOTE过采样随机森林RF与粒子群算法PSO融合模型实现肥胖等级预测|附AI智能体、代码和数据

封面:

关于分析师

在此对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过采样;随机森林;粒子群算法

!1 引言

!研究背景

全球范围内肥胖问题日益严重,肥胖由遗传、生理、心理、社会经济与环境多因素共同促成。在可改变的风险因素中,饮食习惯与身体活动水平被认为影响最为直接。高热量饮食、缺乏运动、不规律进餐均与肥胖密切相关,且肥胖会推高心血管疾病、2型糖尿病、部分癌症与肌肉骨骼疾病的发病风险。

随着城市化加快,饮食结构普遍转向高脂肪、高糖,久坐式电子设备依赖又削弱了体力消耗。世界卫生组织统计显示,全球超重成年人已超19亿,其中肥胖者约6.5亿,由此带来的医疗费用攀升与劳动力损失成为突出社会经济负担。

导师答辩高频提问:为何选取生活习惯数据而非体检生化指标来估计肥胖等级?
标准答案:生化指标获取成本高、难以大规模自查;而饮食与活动数据可由问卷低成本采集,更利于健康管理机构做常态化筛查。本文目标本就是"可落地的日常筛查工具",故以生活习惯为主特征。

!研究目的

本研究旨在厘清生活习惯与肥胖等级的关系,具体目标包括:分析饮食模式、运动习惯、吸烟饮酒等行为对肥胖水平的影响;评估上述因素与肥胖的相关性及潜在因果线索;基于数据结果提出预防干预措施;为公共卫生与健康管理方提供可操作的量化依据。

!研究意义

科学层面,定量刻画生活习惯与肥胖的关联,为理解肥胖复杂成因补充证据。公共健康层面,结论可支撑更有针对性的干预政策。个体层面,提升公众对风险因素的认知,引导健康选择。经济层面,预防肥胖及相关慢病有助于削减医疗支出。

!2 文献综述

钟雨婷采用机器学习分析肥胖等级影响因素,用SMOTE处理类别不平衡,建立决策树、随机森林与神经网络模型,最优的SMOTE随机森林准确率达80%、AUC为0.8839,为后续研究提供了方法参照。

何双涛与刘军抽取大样本,对BAI与BMI、腰围、腰臀比及代谢指标做 线性 **相关与ROC分析,发现BAI与BMI、腰围相关性良好,可作为评价国人肥胖的新指标。

Iparraguirre-Villanueva等人用决策树预测营养患者肥胖水平,准确率92.89%、灵敏度94%,直观展示了决策树在此类分类任务中的高效性。

朱茵渠等人分析大学生体质健康,发现轻体重比例偏高而肥胖比例较低,饮食习惯与体质健康显著相关。其综述还涵盖生活方式对大学生超重共病、部分地区学生超重趋势、生活习惯干预效果等四项实证,一致强调健康生活方式的预防价值。

一项针对年轻健康男性的研究,按BMI与代谢状态分组,测量14个肥胖相关代谢标记物,比较代谢健康型肥胖(MHO)与代谢不健康型肥胖(MUO)的差异,为理解肥胖表型提供数据支撑。

综合来看,基于饮食与身体活动估计肥胖等级切实可行,机器学习能显著提升预测精度,肥胖是多因素复杂现象,需结合遗传、生活方式与代谢健康综合看待。

!3 采集数据探索性分析

!数据介绍

本文数据来源于某公开机器学习数据库,样本主要来自部分海外城市居民,分析结论的普适性因此存在一定局限。数据集含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的图表中存在部分浮点值,后续预处理时应转为整数类型。

相关文章

!Python开发随机森林、梯度提升树与决策树融合模型预测体重变化及健康风险|附AI智能体、代码和数据

原文链接:https://tecdat.cn/?p=36648

内容概要:本文基于某健康与营养调查数据,用Python搭建决策树、随机森林、梯度提升树与神经网络对比体重变化预测,随机森林特征重要性显示年龄对体重变化影响最显著(约0.423),与本文"年龄是肥胖首要风险因素"的结论相互印证,可作为生活习惯—体重管理建模的延伸阅读。

描述性统计

本文仅展示年龄、身高、体重、蔬菜频率(FCVC)、正餐频次(NCP)、饮水量(CH2O)、锻炼频率(FAF)、电子设备时长(TUE)的描述性统计,并绘制箱线图探查异常值。

变量平均值标准差最小值最大值中位数峰度偏度
Age24.316.35146122.782.831.53
Height1.700.091.451.981.70-0.56-0.01
Weight86.5926.193917383-0.700.26
FCVC2.420.53132.39-0.64-0.43
NCP2.690.78143-0.39-1.11
CH2O2.010.61132-0.88-0.10
FAF1.010.85030.63-0.620.50
TUE0.660.61020.63-0.550.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条,数据量变化不影响预测。

类别型变量的再编码

对变量做如下再编码,便于建模:

变量再编码
GENDERMale=0, Female=1
FAMILYno=0, yes=1
FAVCno=0, yes=1
SMOKEno=0, yes=1
SCCno=0, yes=1
CAECno=0, Sometimes=1, Frequently=2, Always=3
CALCno=0, Sometimes=1, Frequently=2, Always=3
MTRANSPublic_Trans=0, Walking=1, Automobile=2, Motorbike=3, Bike=4
NObeyesdadInsufficient_W=0, Normal_W=1, Overweight_L_I=2, Obesity_T_I=3, Obesity_T_II=4, Obesity_T_III=5,6

!4 建模与实验

!模型选择

初步选取模型说明

逻辑回归(Logistic Regression **)适合特征数不庞大的分类问题。决策树(Decision Tree)基于树结构,易于解释。随机森林(Random Forest)通过集成多棵决策树提升性能。人工神经网络可刻画复杂非线性关系,适合高维或复杂模式。

数据说明

目标变量为7级肥胖等级。由于肥胖等级由BMI(身高等计算得出),建模时剔除身高、体重;又因探索分析显示正餐频次(NCP)、是否抽烟(SMOKE)、电子设备时长(TUE)与目标几乎无关,一并剔除。按80%训练、20%测试切分。尝试决策树、随机森林、逻辑回归与神经网络四种模型。

模型比较

四种模型训练后对比训练时间与准确率,随机森林准确率最高,故选其作为初步模型。

模型训练时间准确率
决策树0.01410.71
随机森林0.48850.80
逻辑回归1.90410.58
BP神经网络8.42230.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相对较弱,仍有提升空间。

类别precisionrecallf1-scoresupport
00.830.890.8644
10.660.740.6957
20.840.650.7365
30.690.610.6557
40.760.780.7768
50.820.930.8757
60.981.000.9965
accuracy0.800.800.80413

阅读原文进群获取完整内容及更多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,较基线提升明显,证明此次优化可行。

类别PrecisionRecallF1-ScoreSupport
00.870.900.8952
10.690.790.7361
20.820.720.7746
30.790.590.6751
40.800.810.8068
50.870.950.9164
60.991.000.9971
accuracy0.840.840.84413
结果分析

随机森林特征重要性排序如图15。贡献最大的前四个特征依次为:年龄(Age)重要性超20%,居核心地位;蔬菜摄入频率(FCVC)与体育锻炼频率(FAF)分列二、三;饮水量(CH2O)排第四。

图 15 随机森林特征重要性条形图

年龄增长伴随新陈代谢率下降、能量消耗减少,是肥胖首要风险指标。蔬菜摄入频率越高,饮食结构越健康,利于控制总热量;体育锻炼频率直接影响能量消耗,规律运动对体重与心血管均有益。饮水量充足可促进代谢、增加饱腹感从而减少高热量摄入。

导师答辩高频提问:特征重要性高是否等于因果性强?能否直接据此给干预建议?
标准答案:特征重要性仅反映模型判别贡献,不等于因果。本文在结论中将其与文献综述的流行病学证据交叉印证(如年龄、运动、蔬菜摄入均有独立研究支撑),故建议有依据,但若要确证因果仍需前瞻性干预试验。

!5 结论建议

!结论

本文基于饮食与身体活动数据,用随机森林刻画影响肥胖等级的关键变量。年龄、饮食习惯与体育活动是核心变量,其中年龄重要性最高;蔬菜频率(FCVC)与锻炼频率(FAF)分列二、三,说明不良饮食与缺乏运动是主要行为诱因;饮水量(CH2O)与性别(Gender)重要性也较高。

饮酒频率(CALC)、两餐进食频率(CAEC)与家族肥胖史(Family_history)对等级有一定影响,提示遗传与生活方式在特定条件下作用显著;而交通工具(MTRANS)与卡路里监测(SCC)影响较小。模型经PSO优化后准确率升至84%,在轻重肥胖间分类表现均衡,展现了实际应用潜力。

!建议

针对年龄和遗传因素的精准干预:年龄为首因,家族肥胖史亦有作用,应优先关注中老年人与有家族史的高风险群体,提供定期体检与定制化低热量饮食、适度运动方案。

改善饮食习惯:减少高脂高糖食品,增加蔬菜与低热量食品比例;用卡路里记录软件提升健康饮食意识,尤需在年轻群体中培养良好习惯。

推广体育活动和运动干预:为不同年龄段设计运动计划,中老年以步行、游泳等低强度有氧为主,年轻群体可增加高强度健身;社区与学校应补充运动设施。

提高饮水量的健康意识:倡导每日适量白开水、减少含糖饮料,通过宣教普及饮水对代谢与体重管理的积极作用。

!总结

!核心问题与解决方案

!技术创新与业务价值

  1. 技术创新:构建"SMOTE过采样 + 随机森林 + 粒子群算法(PSO)超参数优化"的三段式流水线,把七分类 Obesity 任务的测试准确率从0.80提升至0.84,且工程上可全自动寻参。
  2. 方法创新:将PSO的群体智能寻优思想用于树模型超参搜索,避免网格搜索的计算浪费,50次迭代即收敛。
  3. 业务价值:模型可封装为对话式AI智能体,健康管理机构凭问卷即可自动分级,预计将营养师人工问卷耗时压缩可观比例,支撑常态化肥胖筛查与早干预。

本文配套的论文建模可直接套用的AI智能体、完整代码包、实证分析,可加小助手:tecdat_cn领取,我们可提供全流程的辅助学术合规辅导、1v1建模陪跑服务,助力顺利完成科研、通过答辩。

作者系健康数据建模方向分析师,拥有多年数据采集、可视化与机器学习实战经验。

喜欢(0)

上一篇

短剧桂花落尽剧情介绍

短剧桂花落尽剧情介绍

下一篇

让Grok助你建立Prompt资产库:从零散指令到可复用模板

让Grok助你建立Prompt资产库:从零散指令到可复用模板
猜你喜欢