机器学习每周挑战——肥胖数据预测

数据的截图

# 字段    说明
# Gender    性别
# Age   年龄
# Height    身高
# Weight    体重
# family_history_with_overweight    家族肥胖史
# FAVC  是否频繁食用高热量食物
# FCVC  食用蔬菜的频次
# NCP   食用主餐的次数
# CAEC  两餐之间的食品消费:always(总是);frequently(经常);sometimes(有时候)
# SMOKE 是否吸烟
# CH2O  每日耗水量
# SCC   高热量饮料消耗量
# FAF   运动频率
# TUE   使用电子设备的时间
# CALC  酒精消耗量:0(无); frequently(经常);sometimes(有时候)
# MTRANS    日常交通方式:Automobile(汽车);Bike(自行车);Motorbike(摩托车);Public Transportation(公共交通);Walking(步行)
# 0be1dad   肥胖水平


# 肥胖水平中各字段意思
# Ormal_Weight  正常
# Insufficient Weight   体重不足
# Obesity_Type_I    肥胖类型 I
# Obesity_Type_ll   肥胖类型 II
# Obesity_Type_lll  肥胖类型 III
# Overweight_Level_I    一级超重
# Overweight_Level_Il   二级超重

# 了解了各个字段的含义后,我们来看问题
# 问题描述
# 相关性分析
# 群体特征分析
# 构建肥胖风险预测模型
# 数据可视化
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import pylab as pl
import seaborn as sns
from sklearn.preprocessing import OneHotEncoder,LabelEncoder,StandardScaler
from scipy.stats import spearmanr
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report


data = pd.read_csv("obesity_level.csv")
pd.set_option("display.max_columns",1000)
print(data.head(5))

 导入需要用到的第三方库,导入数据

# 知道了问题后我们先对数据进行预处理
print(data.info())
print(data.isnull().sum())
data = data.drop('id',axis=1)
data['Age'] = data['Age'].astype('int64')

# 没有缺失值,因此我们来看数据
# 首先ID这一列对我们的分析没有任何帮助,我们将其删除

# 由于年龄应该是整数,但是数据集中年龄存在小数,我们将其转换为整数

处理之后,我们来看第一个问题,相关性分析,想到什么——热力图(斯皮尔曼相关系数)

columns = ['Gender', 'Age', 'Height', 'Weight', 'family_history_with_overweight',
       'FAVC', 'FCVC', 'NCP', 'CAEC', 'SMOKE', 'CH2O', 'SCC', 'FAF', 'TUE',
       'CALC', 'MTRANS']

for col in columns:
    if data[col].dtype == object:
        df = pd.crosstab(data[col],data['0be1dad'])
        pl.figure()
        sns.heatmap(df,cmap='coolwarm',annot=True,fmt='2g')
        plt.xlabel(col)
        plt.ylabel('0be1dad')
        # plt.tight_layout()
        # plt.xticks(rotation=60)
        plt.title(col+'与肥胖水平之间的相关性')
    else:
        data[col+ '_bins'] = pd.qcut(data[col],q=5,duplicates='drop')
        df =data.groupby([col+ '_bins','0be1dad']).size().unstack()
        df.plot(kind='bar',stacked=True)
        plt.xlabel(col)
        plt.ylabel('0be1dad')
        # plt.tight_layout()
        # plt.xticks(rotation=60)
        plt.title(col + '与肥胖水平之间的相关性')

plt.show()

由于图像绘制较多,因此我选择部分图像进行展示

 

 

 

从途中我们可以看出各个特征与肥胖水平之间的相关性,但是图片可以得到的数据有限,具体欸到相关性强弱还得需要通过数据来分析。首先我们先将分类变量转换为数值型变量。

le = LabelEncoder()
for col in columns:
    if data[col].dtype == object:
        data[col] = le.fit_transform(data[col])

print(data.head())
# 计算斯皮尔曼秩相关系数
for i in columns:
    correlation, p_value = spearmanr(data[i],data['0be1dad'])
    print("变量"+i+"与变量0be1dad之间的斯皮尔曼秩相关系数",correlation)
    print("p值",p_value)

 变量Gender与变量0be1dad之间的斯皮尔曼秩相关系数 0.014658850601937863
p值 0.03468814382118435
变量Age与变量0be1dad之间的斯皮尔曼秩相关系数 0.2859097257571513
p值 0.0
变量Height与变量0be1dad之间的斯皮尔曼秩相关系数 0.0549005296297657
p值 2.465342094292171e-15
变量Weight与变量0be1dad之间的斯皮尔曼秩相关系数 0.40279883619705414
p值 0.0
变量family_history_with_overweight与变量0be1dad之间的斯皮尔曼秩相关系数 0.2863193269279612
p值 0.0
变量FAVC与变量0be1dad之间的斯皮尔曼秩相关系数 0.015215732134776854
p值 0.028363458172357518
变量FCVC与变量0be1dad之间的斯皮尔曼秩相关系数 0.06676140706468933
p值 6.036927997520049e-22
变量NCP与变量0be1dad之间的斯皮尔曼秩相关系数 -0.13504675225801754
p值 4.508309933218467e-85
变量CAEC与变量0be1dad之间的斯皮尔曼秩相关系数 0.24046194989929878
p值 8.204819691934083e-271
变量SMOKE与变量0be1dad之间的斯皮尔曼秩相关系数 -0.011154010915639693
p值 0.10805818554147692
变量CH2O与变量0be1dad之间的斯皮尔曼秩相关系数 0.17622305494933643
p值 2.0464562531581523e-144
变量SCC与变量0be1dad之间的斯皮尔曼秩相关系数 -0.0455429294387019
p值 5.214791611958936e-11
变量FAF与变量0be1dad之间的斯皮尔曼秩相关系数 -0.09845958938837115
p值 6.944014419452994e-46
变量TUE与变量0be1dad之间的斯皮尔曼秩相关系数 -0.05047637969363524
p值 3.422014415895151e-13
变量CALC与变量0be1dad之间的斯皮尔曼秩相关系数 0.12321280727640145
p值 5.040375691868427e-71
变量MTRANS与变量0be1dad之间的斯皮尔曼秩相关系数 -0.0721085385266057
p值 2.4264780504638294e-25

斯皮尔曼秩相关系数接近1表示变量之间呈现正相关,接近-1表示变量之间呈现负相关,接近0表示变量之间无相关性。

p值是用来判断统计显著性的指标,它告诉我们观察到的相关系数是否不太可能是由随机因素造成的。如果p值小于显著性水平(如0.05),则可以拒绝原假设,即两个变量不相关,从而认为斯皮尔曼相关系数具有统计学意义。这里面的数据2.4264780504638294e-25表示科学计数法2.4264*10的负25次方。

上次周挑战由于使用了标签编码来进行处理数据,因此,这周挑战使用独热编码来处理数据

scaler = StandardScaler()
for col in columns:
    if data[col].dtype != object:
        data[col] = scaler.fit_transform(data[col].values.reshape(-1,1))


encode = OneHotEncoder(sparse_output=False)
for col in columns:
    if data[col].dtype == object:
        encode_data = encode.fit_transform(data[[col]])
        data.drop(col,axis=1,inplace=True)
        encode_columns = [f"{col}_{i}"for i in range(encode_data.shape[1])]
        data = pd.concat([data,pd.DataFrame(encode_data,columns=encode_columns)],axis=1)

由于后面模型使用了逻辑回归,因此我们要对数据进行标准化处理。

 

# 选择一个常用的机器学习算法来构建肥胖风险预测模型。考虑到这是一个分类问题,我们可以选择以下算法之一:
#
# 逻辑回归(Logistic Regression):这是一种广泛用于分类问题的算法,特别是当特征数量不是很大时。
# 决策树(Decision Tree):这是一种基于树结构的模型,易于理解和解释。
# 随机森林(Random Forest):这是一种集成算法,通过组合多个决策树来提高性能。
# 支持向量机(Support Vector Machine):这是一种强大的分类算法,特别是在特征维度较高时。
# 所以我们选择将四种模型全部输出来综合判断哪个模型更好,为了方便所以我所有模型全部使用默认参数,涉及后期的模型调优我们可以指定模型参数
Dtree = DecisionTreeClassifier()
Rtree = RandomForestClassifier()
log = LogisticRegression(max_iter=1000)
svm = SVC()

models = [Dtree,Rtree,log,svm]

X = data.drop('0be1dad',axis=1)
y = data['0be1dad']

X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3,random_state=42)

for model in models:
    model.fit(X_train,y_train)
    y_pred = model.predict(X_test)
    print(model.__class__.__name__+"模型的的分类报告:")
    print(classification_report(y_test,y_pred))
    print("该模型的分数" ,+ model.score(X_test,y_test))

# 经过比较,我们选择随机森林来进行特征重要性分析
Rtree.fit(X_train,y_train)
importance = Rtree.feature_importances_
feature = X.columns
sort_index = importance.argsort()

plt.figure()
plt.barh(range(len(sort_index)),importance[sort_index])
plt.yticks(range(len(sort_index)),[feature[i] for i in sort_index])
plt.xlabel("特征重要性")
plt.title("特征重要性")

plt.show()

DecisionTreeClassifier模型的的分类报告:
                     precision    recall  f1-score   support

       0rmal_Weight       0.79      0.79      0.79       907
Insufficient_Weight       0.91      0.89      0.90       755
     Obesity_Type_I       0.80      0.79      0.80       858
    Obesity_Type_II       0.95      0.95      0.95      1005
   Obesity_Type_III       0.99      0.99      0.99      1207
 Overweight_Level_I       0.65      0.70      0.67       733
Overweight_Level_II       0.71      0.67      0.69       763

           accuracy                           0.84      6228
          macro avg       0.83      0.83      0.83      6228
       weighted avg       0.84      0.84      0.84      6228

该模型的分数 0.8432883750802826
RandomForestClassifier模型的的分类报告:
                     precision    recall  f1-score   support

       0rmal_Weight       0.82      0.89      0.85       907
Insufficient_Weight       0.94      0.90      0.92       755
     Obesity_Type_I       0.88      0.86      0.87       858
    Obesity_Type_II       0.97      0.98      0.98      1005
   Obesity_Type_III       1.00      1.00      1.00      1207
 Overweight_Level_I       0.77      0.74      0.75       733
Overweight_Level_II       0.79      0.78      0.79       763

           accuracy                           0.89      6228
          macro avg       0.88      0.88      0.88      6228
       weighted avg       0.89      0.89      0.89      6228

该模型的分数 0.8909762363519589
LogisticRegression模型的的分类报告:
                     precision    recall  f1-score   support

       0rmal_Weight       0.84      0.80      0.82       907
Insufficient_Weight       0.88      0.92      0.90       755
     Obesity_Type_I       0.82      0.82      0.82       858
    Obesity_Type_II       0.94      0.98      0.96      1005
   Obesity_Type_III       0.99      1.00      1.00      1207
 Overweight_Level_I       0.73      0.73      0.73       733
Overweight_Level_II       0.72      0.68      0.70       763

           accuracy                           0.86      6228
          macro avg       0.85      0.85      0.85      6228
       weighted avg       0.86      0.86      0.86      6228

该模型的分数 0.8625561978163134
SVC模型的的分类报告:
                     precision    recall  f1-score   support

       0rmal_Weight       0.81      0.82      0.82       907
Insufficient_Weight       0.91      0.90      0.91       755
     Obesity_Type_I       0.85      0.83      0.84       858
    Obesity_Type_II       0.95      0.98      0.96      1005
   Obesity_Type_III       1.00      1.00      1.00      1207
 Overweight_Level_I       0.68      0.72      0.70       733
Overweight_Level_II       0.74      0.71      0.72       763

           accuracy                           0.86      6228
          macro avg       0.85      0.85      0.85      6228
       weighted avg       0.86      0.86      0.86      6228

该模型的分数 0.8638407193320488

目前可暂时得出如下结论:

1、FCVC(是否频繁食用高热量食物),Age(年龄),Weight(体重),Height(身高), 对肥胖风险影响较大;
2、交通方式对肥胖风险影响几乎没有。

 

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

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

相关文章

Ubuntu20.04使用Neo4j导入CSV数据可视化知识图谱

1.安装JDK( Ubuntu20.04 JDK11) sudo apt-get install openjdk-11-jdk -y java -version which java ls -l /usr/bin/java ls -l /etc/alternatives/java ls -l /usr/lib/jvm/java-11-openjdk-amd64/bin/java确认安装路径为/usr/lib/jvm/java-11-openjd…

最新高自定义化的AI翻译(沉浸式翻译),可翻译网页和PDF等文件或者文献(附翻译API总结,Deeplx的api,Deepl的api)

前序 常见问题: 1.有时候想翻译网页,又翻译文献怎么办?下两个软件? 2.什么软件可以翻译视频字幕? 3.什么软件可以翻译PDF文件? 沉浸式翻译介绍 可以翻译文献可以翻译视频字幕可以翻译PDF文件支持OpenAI翻译…

post请求爬虫入门程序

<!--爬虫仅支持1.8版本的jdk--> <!-- 爬虫需要的依赖--> <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.2</version> </dependency><!-- 爬虫需…

前端开发全景指南:语言与框架的精粹

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

axios快速入门

一、环境配置 1.1概述 上古浏览器页面在向服务器请求数据时&#xff0c;因为返回的是整个页面的数据&#xff0c;页面都会强制刷新一下&#xff0c;这对于用户来讲并不是很友好。并且我们只是需要修改页面的部分数据&#xff0c;但是从服务器端发送的却是整个页面的数据&#…

深入浅出 -- 系统架构之负载均衡Nginx动静分离

一、Nginx动静分离 动静分离应该是听的次数较多的性能优化方案&#xff0c;那先思考一个问题&#xff1a;为什么需要做动静分离呢&#xff1f;它带来的好处是什么&#xff1f; 其实这个问题也并不难回答&#xff0c;当你搞懂了网站的本质后&#xff0c;自然就理解了动静分离的重…

深度学习相关知识

一.环境配置 1.cuda/cudnn安装&#xff1a; 安装cuda之前首先安装vs&#xff0c;vs版本从低到高安装。 a) 安装cuda&#xff1a;首先查看显卡支持的最高CUDA的版本&#xff0c;以便下载对应的CUDA安装包&#xff1b; cmd命令行&#xff1a;nvidia-smi,显示如下&#xff1a;…

Redis的主从复制、哨兵模式、集群,概述及部署

目录 一、Redis主从复制 1.1.Redis主从复制的概念 1.2.Redis主从复制的作用 1.3. Redis主从复制的流程 1.4.Redis主从复制的搭建 1.4.1.修改Master节点 1.4.2. 修改Slave节点Redis配置文件 1.4.3.验证主从效果 二、Redis 哨兵模式 2.1 哨兵模式的原理 2.2 哨兵模式…

机器学习笔记 - 文字转语音技术路线简述以及相关工具不完全清单

一、TTS技术简述 今天的文本到语音转换技术(TTS)的目标已经不仅仅是让机器说话,而是让它们听起来像不同年龄和性别的人类。通常,TTS 系统合成器的质量是从不同方面进行评估的,包括合成语音的清晰度、自然度和偏好,以及人类感知因素,例如可理解性。 1、技术路线 (1)基…

Matlab:任意的三维Cubic空间中生成大小不一样的小球,并画出截面

生成小球和大球的代码块 clear all clc close all % entorid3D rand(10,3, 0.1,0.9);% for c11 0.05:0.3:0.95 % for c12 0.05:0.3:0.95 % for c13 0.05:0.3:0.95 % [x1,y1,z1] ellipsoid(c11, c12, c13, 0.05, 0.05, 0.05,100); % …

leetcode 13. 罗马数字转整数

代码&#xff1a; class Solution(object):def romanToInt(self, s):""":type s: str:rtype: int"""dict1 {I:1,V:5,X:10,L:50,C:100,D:500,M:1000}nums 0t len(s)i 0while i<t :if s[i]I:if i1 t:numsdict1.get(s[i])i1else:if s[i1] V…

深入浅出 -- 系统架构之负载均衡Nginx资源压缩

一、Nginx资源压缩 建立在动静分离的基础之上&#xff0c;如果一个静态资源的Size越小&#xff0c;那么自然传输速度会更快&#xff0c;同时也会更节省带宽&#xff0c;因此我们在部署项目时&#xff0c;也可以通过Nginx对于静态资源实现压缩传输&#xff0c;一方面可以节省带宽…

SystemC入门之测试平台编写完整示例:带同步输出的多路选择器

内容&#xff1a;SystemC入门书中的简单测试平台编写示例。 模块文件编写 带锁存输出的4选1多路器模型。输出在信号clock的正跳变沿时刻被锁存。 sync_mux41.h文件 #include <systemc.h>SC_MODULE(sync_mux41) {sc_in<bool> clock, reset;sc_in<sc_uint<…

基于沙漏 Tokenizer 的高效三维人体姿态估计框架HoT

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 摘要Abstract文献阅读&#xff1a;基于沙漏 Tokenizer 的高效三维人体姿态估计框架HoT1、研究背景2、提出方法3、模块详细3.1、什么是HoT3.2、HoT 框架3.3、Token 剪…

IDEA/PyCharm/GoLand同时打开2个分支

背景 想对比2个分支的代码&#xff0c;或者在A分支开发时&#xff0c;需要看B分支&#xff0c;切来切去太麻烦&#xff0c;而且新写的代码还没法直接切到B分支。 操作方法 假如有A、B 2个分支。 通过git worktree为B分支新建1个worktree&#xff0c;然后通过打开新项目的方式…

Mac资源库的东西可以删除吗?mac资源库在哪里打开 cleanmymacx是什么 cleanmymac免费下载

在使用Mac电脑的过程中&#xff0c;用户可能会遇到存储空间不足的问题。一种解决方法是清理不必要的文件&#xff0c;其中资源库&#xff08;Library&#xff09;文件夹是一个常被提及但又让人迷惑的目标。Mac资源库的东西可以删除吗&#xff1f;本文旨在解释Mac资源库的作用、…

JDK安全剖析之安全处理入门

0.前言 Java 安全包括大量 API、工具以及常用安全算法、机制和协议的实现。Java 安全 API 涵盖了广泛的领域&#xff0c;包括加密、公钥基础设施、安全通信、身份验证和访问控制。Java 安全技术为开发人员提供了编写应用程序的全面安全框架&#xff0c;还为用户或管理员提供了…

DeepSort行人车辆识别系统(实现目标检测+跟踪+统计)

文章目录 1、前言2、源项目实现功能3、运行环境4、如何运行5、运行结果6、遇到问题7、使用框架8、目标检测系列文章 1、前言 1、本文基于YOLOv5DeepSort的行人车辆的检测&#xff0c;跟踪和计数。 2、该项目是基于github的黄老师傅&#xff0c;黄老师傅的项目输入视频后&#x…

Django之五种中间件定义类型—process_request、process_view、process_response.......

目录 1. 前言 2. 基础中间件 3. 如何自定义中间件 4. 五种自定义中间件类型 4.1 process_request 4.2 process_view 4.3 process_response 4.4 process_exception 4.5 process_template_response 5. 最后 1. 前言 哈喽&#xff0c;大家好&#xff0c;我是小K,今天咋们…

计算机网络 实验指导 实验12

路由信息协议&#xff08;RIP&#xff09;实验 1.实验拓扑图 名称接口IP地址网关Switch AF0/1192.168.1.1/24F0/2172.1.1.1/24Switch BF0/1192.168.1.2/24F0/2172.2.2.1/24PC1172.1.1.2/24172.1.1.1PC2172.1.1.3/24172.1.1.1PC3172.2.2.2/24172.2.2.1PC4172.2.2.3/24172.2.2.1…