基于随机森林和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博客,创作不易,如果觉得文章不错,可以点赞👍收藏📁评论📒
📢你的支持和鼓励是我创作的动力❗❗❗

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/584495.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

学习【Mysql运维篇】这一篇就够了

运维篇 1. 日志1-1. 错误日志1-2. 二进制日志1-3. 查询日志1-4. 慢查询日志 2. 主从复制2-1. 概述2-2. 原理2-3. 搭建 3. 分库分表3-1. 介绍3-2. Mycat概述3-3. Mycat入门3-4. Mycat配置3-5. Mycat分片3-6. Mycat管理及监控 4. 读写分类 1. 日志 1-1. 错误日志 错误日志是MyS…

计算机服务器中了mkp勒索病毒怎么办,mkp勒索病毒解密数据恢复流程

网络技术的不断应用与发展,为企业的生产运营带来了极大便利,越来越多的企业依赖网络开展各项工作业务,网络也大大提升了企业的生产运营效率,但网络是一把双刃剑,在为企业提供便利的同时,也为企业的数据安全…

云里物里家电运输新模式:实时定位、智能监控、降本增效

随着电商行业的飞速发展,大家电作为大宗商品,其物流运输过程中面临的痛点日益凸显。如何确保大家电在运输过程中的安全、及时送达以及成本控制,成为了物流企业亟待解决的问题。云里物里自研的物流资产监控管理方案,有效解决了大家…

JAVA面试题分享--集合

常见的数据结构(了解) 常用的数据结构有:数组,栈,队列,链表,树,散列,堆,图等 数组是最常用的数据结构,数组的特点是长度固定,数组的大…

一、交换网络基础

目录 1.交换机的转发行为 2.数据帧的类型 3.ARP地址解析步骤 Hub:物理层设备 交换机:数据链路层设备 1.交换机的转发行为 泛洪(Flooding)(有可能是单播帧(未知单播帧),也有可能是…

10GMAC层设计系列-(1)10G Ethernet PCS/PMA

一、引言 对于10G以太网MAC层的实现,Xilinx提供了 3种IP核,分别是 10G Ethernet MAC、10G Ethernet PCS/PMA、10G Ethernet Subsystem。 10G Ethernet MAC只包含MAC层,外部需要提供一个PHY芯片进行数据对齐,10G Ethernet MAC与P…

Python 深度学习(二)

原文:zh.annas-archive.org/md5/98cfb0b9095f1cf64732abfaa40d7b3a 译者:飞龙 协议:CC BY-NC-SA 4.0 第五章:图像识别 视觉可以说是人类最重要的感官之一。我们依赖视觉来识别食物,逃离危险,认出朋友和家人…

Kompas.ai的可持续内容生态:绿色营销的新选择

在全球环境保护意识日益增强的今天,绿色营销已成为企业树立品牌形象、展示社会责任的重要手段。绿色营销不仅关注产品的环保特性,还包括企业的整体可持续发展战略和对环境的积极贡献。本文将讨论企业如何通过绿色营销树立品牌形象,介绍Kompas…

el-cascader 数据回显 checkbox没有被勾选

需求: 需要支持多选以及能搜索,并且 点击所有队伍最新版本这个功能按钮时,要将用户勾选的数据保存的前提下,将满足条件的数据也一并勾选。最后保存的数据 只需要子级的id,组成数组就行了,所以我这里有用到…

ITMS-90426: Invalid Swift Support

原文 Please correct the following issues and upload a new binary to App Store Connect. ITMS-90426: Invalid Swift Support - The SwiftSupport folder is missing. Rebuild your app using the current public (GM) version of Xcode and resubmit it. 解决方式 ITMS-…

U盘提示“未初始化”?别慌,数据还有救!

当你满心期待地将U盘插入电脑,准备传输或读取重要文件时,突然弹出一个提示框:“U盘没有初始化”。遇到这样的情况,相信很多人都会感到焦虑和迷茫。别急,这篇文章将为你详细解析U盘未初始化的原因,并提供有效…

【设计模式】简单工厂模式(Simple Factory Pattern)

工厂模式(Factory Pattern) 用于创建不同类型的奖品对象。您可以创建一个奖品工厂,根据配置的类型来实例化相应的奖品对象。 public interface Prize {void award(); }public class MoneyPrize implements Prize {Overridepublic void awar…

一、初识Django

简介 Django 是一个用于构建 Web 应用程序的高级 Python Web 框架。 版本对应 不同版本的django框架是基于特定的不同的python版本开发的,所以不同版本的django框架要正常执行功能只能安装特定的python版本 Django安装 安装 Django # 全局安装 pip install dj…

实战干货|Spark 在袋鼠云数栈的深度探索与实践

Spark 是一个快速、通用、可扩展的大数据计算引擎,具有高性能、易用、容错、可以与 Hadoop 生态无缝集成、社区活跃度高等优点。在实际使用中,具有广泛的应用场景: 数据清洗和预处理:在大数据分析场景下,数据通常需要…

C/C++ 入门(9)编译链接

个人主页:仍有未知等待探索-CSDN博客 专题分栏:C 目录 一、域 1、分类 2、搜索顺序 二、编译链接 1、代码在形成可执行文件的过程 2、符号表 三、问题 1、带有缺省参数的函数声明和定义分离 一、域 1、分类 域:全局域、局部域、命…

CSS-IN-JS Emotion

为什么会有css-in-js 优点 缺点 使用emotion插件库 npm i emotion/core emotion/styled使用时需要解析css属性 使用方式一: 通过注释告诉babel不讲jsx转化为react.create Element的调用,而是转化为jsx语法。会导致一个警告react未使用。 使用方式二&am…

对虾病害分类数据集889张7类别

数据集类型:图像分类用,不可用于目标检测无标注文件 数据集格式:仅仅包含jpg图片,每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数):889 分类类别数:7 类别名称:["baibanbing","bai…

Vitis HLS 学习笔记--Schedule Viewer 调度查看器

目录 1. 简介 2. Schedule Viewer详解 2.1 视图说明 2.1.1 Operation\Control Step 2.1.2 周期关系图 2.1.3 Schedule Viewer 菜单栏 2.1.4 属性视图 2.2 内容说明 2.2.1 实参(b)解释 2.2.2 实参(a)解释 2.2.3 变量&am…

TCP协议在物联网中的实战

一、TCP协议介绍 网上对TCP协议介绍众多,本人按照自己的理解简单介绍一下。 TCP(Transmission Control Protocol, 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输控制层通信协议。 1.1 协议机制 1.1.1 三次握手 &…

MongoDB安装(windows)

mongodb 的安装(windows) 下载软件 官网下载:https://www.mongodb.com/ 安装 1.双击打开MSI包 2.同意协议 3.选择安装形式 complete:默认安装,不可以修改安装地址 custom:自定义安装【推荐】 4.选择安装路径和…