基于随机森林和Xgboost对肥胖风险的多类别预测

2024-04-30 14:36

本文主要是介绍基于随机森林和Xgboost对肥胖风险的多类别预测,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

基于随机森林和Xgboost对肥胖风险的多类别预测

作者:i阿极

作者简介:数据分析领域优质创作者、多项比赛获奖者:博主个人首页

😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!👍👍👍

📜📜📜如果有小伙伴需要数据集和学习交流,文章下方有交流学习区!一起学习进步!💪


大家好,我i阿极。喜欢本专栏的小伙伴,请多多支持

专栏案例:机器学习案例
机器学习(一):线性回归之最小二乘法
机器学习(二):线性回归之梯度下降法
机器学习(三):基于线性回归对波士顿房价预测
机器学习(四):基于KNN算法对鸢尾花类别进行分类预测
机器学习(五):基于KNN模型对高炉发电量进行回归预测分析
机器学习(六):基于高斯贝叶斯对面部皮肤进行预测分析
机器学习(七):基于多项式贝叶斯对蘑菇毒性分类预测分析
机器学习(八):基于PCA对人脸识别数据降维并建立KNN模型检验
机器学习(十四):基于逻辑回归对超市销售活动预测分析
机器学习(十五):基于神经网络对用户评论情感分析预测
机器学习(十六):线性回归分析女性身高与体重之间的关系
机器学习(十七):基于支持向量机(SVM)进行人脸识别预测
机器学习(十八):基于逻辑回归对优惠券使用情况预测分析
机器学习(十九):基于逻辑回归对某银行客户违约预测分析
机器学习(二十):LightGBM算法原理(附案例实战)
机器学习(二十一):基于朴素贝叶斯对花瓣花萼的宽度和长度分类预测
机器学习(二十二):基于逻辑回归(Logistic Regression)对股票客户流失预测分析

文章目录

  • 基于随机森林和Xgboost对肥胖风险的多类别预测
  • 1、前言
  • 2、数据说明
  • 3、导入所需要的模块
  • 4、导入数据
  • 5、查看数据维度
  • 6、查看数据基本信息
  • 7、描述性统计分析
  • 8、探索性数据可视化分析
  • 9、特征编码
  • 10、划分训练集和测试集
  • 11、模型建立
    • 11.1 随机森林分类模型
    • 11.2 Xgboost分类模型
  • 12、模型检验
  • 总结


1、前言

肥胖风险的多类预测不仅关乎个体的健康福祉,更是对全社会健康管理体系的挑战与机遇。在现代社会,随着工作节奏的加快和生活方式的多样化,肥胖已经成为威胁人类健康的重要因素之一。肥胖不仅与高血压、糖尿病、心血管疾病等多种慢性疾病密切相关,还可能导致心理健康问题,如焦虑、抑郁等。

因此,开展肥胖风险的多类预测研究,对于早期识别高风险人群、制定个性化的干预措施、减少肥胖及相关疾病的发生具有重要意义。传统的肥胖风险评估方法往往依赖于单一的指标,如体重指数(BMI),但这种方法忽略了人体成分的复杂性和多样性,难以全面准确地评估肥胖风险。

近年来,随着人工智能和大数据技术的飞速发展,多类预测方法被广泛应用于肥胖风险预测领域。这些方法能够综合考虑个体的遗传、环境、行为等多个因素,通过机器学习算法建立预测模型,实现对肥胖风险的精准预测。这些模型不仅具有高度的准确性和可靠性,还能够为临床医生和公共卫生专家提供科学的决策支持,帮助他们制定更有效的肥胖预防和管理策略。

未来,随着技术的不断进步和数据的不断积累,肥胖风险的多类预测研究将不断深入。我们期待通过这一领域的探索,为全球肥胖防控事业贡献更多的智慧和力量。

2、数据说明

本次比赛的数据集(训练和测试)是从在肥胖或心血管疾病风险数据集上训练的深度学习模型生成的。特征分布与原始分布接近,但不完全相同。作为本次比赛的一部分,您可以随意使用原始数据集,既可以探索差异,也可以查看在训练中加入原始数据集是否能提高模型性能。

注意:该数据集特别适用于可视化、聚类和通用 EDA。

train.csv - 训练数据集; 是分类目标NObeyesdad
test.csv - 测试数据集;您的目标是预测每行的类NObeyesdad

3、导入所需要的模块

import pandas as pd
import numpy as np
import requests
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.preprocessing import LabelEncoder,PowerTransformer
import math  
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix

4、导入数据

train = pd.read_csv(r"D:\playground-series-s4e2\train.csv")
test = pd.read_csv(r"D:\playground-series-s4e2\test.csv")
train.head()

部分结果如下图所示:

在这里插入图片描述

5、查看数据维度

train.shape
test.shape

结果如下所示:

(20758, 18)
(13840, 17)

6、查看数据基本信息

train.info()

结果如下所示:
在这里插入图片描述

7、描述性统计分析

train.describe()

结果如下所示:
在这里插入图片描述

8、探索性数据可视化分析

首先,定义了一个名为single_plot_distribution的函数,用于绘制给定数据框(dataframe)中某一列(column_name)的数据分布。函数首先计算该列的唯一值的出现次数(value_counts)。然后,它创建了一个包含两个子图的图形,一个用于显示环形图(pie chart),另一个用于显示条形图(bar chart)

#绘制单个饼图和条形图的函数
def single_plot_distribution(column_name, dataframe):# 获取指定列的值计数value_counts = dataframe[column_name].value_counts()# 用两个子画面设置图形fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(15, 5), gridspec_kw={'width_ratios': [1, 1]}) # 环形图palette = ["#00B1D2FF", "#FDDB27FF"]color_palette = sns.color_palette(palette)pie_colors = palette[0:3]ax1.pie(value_counts, autopct='%0.001f%%', startangle=90, pctdistance=0.85, colors=pie_colors, labels=None)centre_circle = plt.Circle((0,0),0.70,fc='white')ax1.add_artist(centre_circle)ax1.set_title(f'Distribution of {column_name}', fontsize=16)# 条形图bar_colors = palette[0:3]sns.barplot(x=value_counts.index, y=value_counts.values, ax=ax2, palette=bar_colors,) ax2.set_title(f'Count of {column_name}', fontsize=16)ax2.set_xlabel(column_name, fontsize=14)ax2.set_ylabel('Count', fontsize=14)# 旋转x轴标签以提高可读性ax2.tick_params(axis='x', rotation=45)# 显示绘图plt.tight_layout()plt.show()

由于源码中图过多,这里就举一个例子

single_plot_distribution('NObeyesdad',train)

在这里插入图片描述

定义了一个名为advanced_scatter_plot的函数,用于绘制带有颜色区分的散点图。函数接受四个参数:x_column(x轴的数据列名)、y_column(y轴的数据列名)、target_column(用于区分不同颜色的目标列名)和dataframe(包含数据的DataFrame)。函数首先设置图形大小,然后定义颜色调色板。接着,使用seaborn库的scatterplot函数绘制散点图,其中点的颜色由target_column决定。函数还设置了图表的标题、轴标签和图例,并添加了网格线。最后,使用plt.show()显示图表。

def advanced_scatter_plot(x_column, y_column, target_column, dataframe):plt.figure(figsize=(15, 6))palette = ["#00B1D2FF", "#FDDB27FF"]color_palette = sns.color_palette(palette)sns.scatterplot(x=x_column, y=y_column, hue=target_column, data=dataframe, palette=palette[0:3])plt.title(f'Scatter Plot of {x_column} vs {y_column} Hue by {target_column}', fontsize=16)plt.xlabel(x_column, fontsize=14)plt.ylabel(y_column, fontsize=14)plt.legend(title=target_column)plt.grid(True)plt.show()

由于源码中图过多,这里就举一个例子

advanced_scatter_plot('Age', 'Weight', 'Gender', train)#在男女当中,显示年龄与体重的关系

在这里插入图片描述

9、特征编码

label_encoder = LabelEncoder()
train['NObeyesdad'] = label_encoder.fit_transform(train['NObeyesdad'])train = pd.get_dummies(train)
test = pd.get_dummies(test)

10、划分训练集和测试集

X = train.drop(['id', 'NObeyesdad'], axis=1)
y = train['NObeyesdad']X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)
#将训练集和测试集划分为8:2

11、模型建立

11.1 随机森林分类模型

model_RF = RandomForestClassifier(n_estimators=100, random_state=42)
model_RF.fit(X_train, y_train)
val_preds_RF = model_RF.predict(X_val)
accuracy_RF = accuracy_score(y_val, val_preds_RF)
print(f"Validation Accuracy: {accuracy_RF}")#模型准确率
# Validation Accuracy: 0.8872832369942196

11.2 Xgboost分类模型

from xgboost import XGBClassifier  # 初始化XGBoost分类器  
model_XGB = XGBClassifier(n_estimators=100, random_state=42)  # 使用训练数据拟合模型  
model_XGB.fit(X_train, y_train)
val_preds_XGB = model_XGB.predict(X_val)
accuracy_XGB = accuracy_score(y_val, val_preds_XGB)
print(f"Validation Accuracy: {accuracy_XGB}")#模型准确率
#Validation Accuracy: 0.9019749518304432

12、模型检验

一开始有导入文件名为test的数据集,将训练好的模型进行检验。

if 'CALC_Always' in test.columns:test.drop('CALC_Always', axis=1, inplace=True)
test_preds_RF = model_RF.predict(test.drop('id', axis=1))
test_preds_XGB = model_XGB.predict(test.drop('id', axis=1))
#输出热力图结果
conf_matrix_RF = pd.crosstab(y_val, val_preds_RF, rownames=['Actual'], colnames=['Predicted'])  
conf_matrix_XGB = pd.crosstab(y_val, val_preds_XGB, rownames=['Actual'], colnames=['Predicted'])  
print(conf_matrix_RF)
print('\n')
print(conf_matrix_XGB)

在这里插入图片描述


总结

此项目适合毕设和课设学习等等。由于图过多,本文就显示一个例子,如果需要数据集或源码(每个代码详解)可在博主首页的“资源”下载。

📢文章下方有交流学习区!一起学习进步!💪💪💪
📢首发CSDN博客,创作不易,如果觉得文章不错,可以点赞👍收藏📁评论📒
📢你的支持和鼓励是我创作的动力❗❗❗

这篇关于基于随机森林和Xgboost对肥胖风险的多类别预测的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/949126

相关文章

[数据集][目标检测]血细胞检测数据集VOC+YOLO格式2757张4类别

数据集格式:Pascal VOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2757 标注数量(xml文件个数):2757 标注数量(txt文件个数):2757 标注类别数:4 标注类别名称:["Platelets","RBC","WBC","sickle cell"] 每个类别标注的框数:

AI学习指南深度学习篇-带动量的随机梯度下降法的基本原理

AI学习指南深度学习篇——带动量的随机梯度下降法的基本原理 引言 在深度学习中,优化算法被广泛应用于训练神经网络模型。随机梯度下降法(SGD)是最常用的优化算法之一,但单独使用SGD在收敛速度和稳定性方面存在一些问题。为了应对这些挑战,动量法应运而生。本文将详细介绍动量法的原理,包括动量的概念、指数加权移动平均、参数更新等内容,最后通过实际示例展示动量如何帮助SGD在参数更新过程中平稳地前进。

AI学习指南深度学习篇-带动量的随机梯度下降法简介

AI学习指南深度学习篇 - 带动量的随机梯度下降法简介 引言 在深度学习的广阔领域中,优化算法扮演着至关重要的角色。它们不仅决定了模型训练的效率,还直接影响到模型的最终表现之一。随着神经网络模型的不断深化和复杂化,传统的优化算法在许多领域逐渐暴露出其不足之处。带动量的随机梯度下降法(Momentum SGD)应运而生,并被广泛应用于各类深度学习模型中。 在本篇文章中,我们将深入探讨带动量的随

[数据集][目标检测]智慧农业草莓叶子病虫害检测数据集VOC+YOLO格式4040张9类别

数据集格式:Pascal VOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):4040 标注数量(xml文件个数):4040 标注数量(txt文件个数):4040 标注类别数:9 标注类别名称:["acalcerosis","fertilizer","flower","fruit","grey

XGBoost算法-上

简单解释一下xgboost这个模型 xg是一个非常强大,非常受欢迎的机器学习模型,其中最大的特色就是boosting(改进、推进),怎么改进呢?就是xgboost这个算法,它会先建立一颗简单的决策树,然后看这个决策树的预测结果,有哪些地方算错了,针对这些错误,来进行一些改进,又拿到一颗决策树,然后看第二颗决策树预测结果又哪些地方错了,然后再根据这些错误再做一些改进,通过这一次次的快速的改进,将错

Tensorflow lstm实现的小说撰写预测

最近,在研究深度学习方面的知识,结合Tensorflow,完成了基于lstm的小说预测程序demo。 lstm是改进的RNN,具有长期记忆功能,相对于RNN,增加了多个门来控制输入与输出。原理方面的知识网上很多,在此,我只是将我短暂学习的tensorflow写一个预测小说的demo,如果有错误,还望大家指出。 1、将小说进行分词,去除空格,建立词汇表与id的字典,生成初始输入模型的x与y d

临床基础两手抓!这个12+神经网络模型太贪了,免疫治疗预测、通路重要性、基因重要性、通路交互作用性全部拿下!

生信碱移 IRnet介绍 用于预测病人免疫治疗反应类型的生物过程嵌入神经网络,提供通路、通路交互、基因重要性的多重可解释性评估。 临床实践中常常遇到许多复杂的问题,常见的两种是: 二分类或多分类:预测患者对治疗有无耐受(二分类)、判断患者的疾病分级(多分类); 连续数值的预测:预测癌症病人的风险、预测患者的白细胞数值水平; 尽管传统的机器学习提供了高效的建模预测与初步的特征重

HDD 顺序和随机文件拷贝和存储优化策略

对于机械硬盘(HDD),顺序拷贝和随机拷贝涉及到磁头的移动方式和数据的读取/写入模式。理解这些概念对于优化硬盘性能和管理文件操作非常重要。 1. 顺序拷贝 定义: 顺序拷贝指的是数据从硬盘的一个位置到另一个位置按顺序连续读取和写入。这意味着数据在硬盘上的位置是线性的,没有跳跃或回溯。 特点: 磁头移动最小化:由于数据是连续的,磁头在读取或写入数据时只需要在磁盘的一个方向上移动,减少了寻道时

Anthropic 创始人 Dario Amodei 谈:关于护城河与风险,AI 大很难直接替代人

护城河的迷思   近期,Anthropic创始人Dario Amodei与投资人Erik Torenberg进行了一场引人关注的对话。他们探讨了AI的护城河与潜在风险。话说,护城河就像酒水的保质期,过了时间就得小心别翻车。Amodei提到,AI虽有强大的潜力,但短期内难以完全替代人类的智慧。这可让很多人松了一口气,毕竟机器发热总比人心复杂,听着都觉得不舒服。 聪明与控制的博弈   Dar