【机器学习案列】糖尿病风险可视化及预测

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN人工智能领域的优质创作者,提供AI相关的技术咨询、项目开发和个性化解决方案等服务,如有需要请站内私信或者联系任意文章底部的的VX名片(ID:xf982831907
💬 博主粉丝群介绍:① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。③ 群内也有职场精英,大厂大佬,可交流技术、面试、找工作的经验。④ 进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬。⑤ 进群赠送CSDN评论防封脚本,送真活跃粉丝,助你提升文章热度。有兴趣的加文末联系方式,备注自己的CSDN昵称,拉你进群,互相学习共同进步。

【机器学习案列】糖尿病风险可视化及预测

一、引言

糖尿病是一种日益普遍的慢性疾病,它影响着全球数百万人的生活质量。为了更好地理解糖尿病的发病机制和预测风险,本文将利用一组包含多种生理指标的糖尿病数据集进行可视化分析,并使用结合XGBoost算法,对糖尿病数据集进行分析和预测。接下来直接上代码:

二、数据准备与探索

首先,我们需要加载并探索数据集。我们将使用Python的pandas库来处理数据,并使用matplotlib和seaborn库来进行可视化。

python 复制代码
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from xgboost import XGBClassifier
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
import matplotlib.pyplot as plt
import seaborn as sns

# 加载数据(假设数据集为CSV格式,文件名为diabetes.csv)
url = 'diabetes.csv'  # 请替换为你的数据集路径
data = pd.read_csv(url)

print(data.head())
print(data.info())

从上面的结果可以发现数据包括:Pregnancies(怀孕次数)、Glucose(血糖水平)、BloodPressure(血压)、SkinThickness(皮肤厚度)、Insulin(胰岛素)、BMI(体重指数)、DiabetesPedigreeFunction(糖尿病遗传函数)以及Age(年龄),并通过这些特征来预测Outcome(结果,1表示有糖尿病,0表示没有糖尿病)等特征,并数据集的shape为(768,9)无缺失值。

三、数据可视化

接下来,我们将利用可视化工具来探索数据中的模式和趋势。

3.1 血糖水平(Glucose)与糖尿病结果(Outcome)的关系

python 复制代码
# 设置绘图风格
sns.set(style="whitegrid")
plt.figure(figsize=(10, 6))
sns.boxplot(x='Outcome', y='Glucose', data=data)
plt.title('Blood Glucose Levels by Diabetes Outcome')
plt.show()

3.2 血压(BloodPressure)与糖尿病结果(Outcome)的关系

python 复制代码
plt.figure(figsize=(10, 6))
sns.boxplot(x='Outcome', y='BloodPressure', data=data)
plt.title('Blood Pressure by Diabetes Outcome')
plt.show()

3.3 体重指数(BMI)与糖尿病结果(Outcome)的关系

python 复制代码
plt.figure(figsize=(10, 6))
sns.boxplot(x='Outcome', y='BMI', data=data)
plt.title('BMI by Diabetes Outcome')
plt.show()

3.4 年龄(Age)与糖尿病结果(Outcome)的关系

python 复制代码
plt.figure(figsize=(10, 6))
sns.histplot(data['Age'], hue=data['Outcome'], multiple='stack', kde=True)
plt.title('Age Distribution by Diabetes Outcome')
plt.legend(title='Outcome')
plt.show()

3.5 特征之间的相关性热图

python 复制代码
plt.figure(figsize=(12, 8))
correlation_matrix = data.corr()
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', linewidths=0.5)
plt.title('Correlation Matrix of Diabetes Features')
plt.show()

四、可视化数据分析结论

通过上述可视化分析,我们可以得出以下一些初步结论:

  • 血糖水平(Glucose)与糖尿病结果之间存在显著的正相关关系,即血糖水平越高,患糖尿病的风险越大。
  • 血压(BloodPressure)和体重指数(BMI)也与糖尿病结果有一定的相关性,但不如血糖水平显著。
  • 年龄(Age)分布显示,患有糖尿病的人群中,中老年人占比较大。

五、训练数据集制做

首先,我们需要加载并准备数据。这里我们使用pandas库来处理数据,并使用scikit-learn库来划分数据集和进行预处理,这里可以结合上面可视化的结果来做一些特征工程,这里将不做处理,读者感兴趣可以自己进行相应的特征工程。

python 复制代码
# 划分特征和标签
X = data.drop("Outcome", axis=1)
y = data["Outcome"]
 
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
 
# 特征缩放
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

六、模型训练

接下来,我们将使用XGBoost算法来训练模型。

python 复制代码
# 初始化XGBoost分类器
model = XGBClassifier(use_label_encoder=False, eval_metric='logloss')
 
# 训练模型
model.fit(X_train, y_train)

七、模型预测与评估

训练完成后,我们可以使用测试集来评估模型的性能。

python 复制代码
# 进行预测
y_pred = model.predict(X_test)
 
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.2f}")
 
# 打印混淆矩阵和分类报告
conf_matrix = confusion_matrix(y_test, y_pred)
class_report = classification_report(y_test, y_pred)
 
print("Confusion Matrix:")
print(conf_matrix)
 
print("\nClassification Report:")
print(class_report)

八、特征重要度分析

为了更好地理解数据,我们可以使用一些可视化工具来展示特征的重要性。

python 复制代码
# 获取特征重要性
feature_importances = model.feature_importances_
feature_names = X.columns
 
# 创建DataFrame来存储特征重要性
importance_df = pd.DataFrame({
    'Feature': feature_names,
    'Importance': feature_importances
}).sort_values(by='Importance', ascending=False)
 
# 可视化特征重要性
plt.figure(figsize=(10, 6))
sns.barplot(x='Importance', y='Feature', data=importance_df)
plt.title('Feature Importance')
plt.show()

通过特征重要度的分析,可以发现Glucose(血糖水平)和是否发生糖尿病的相关性最高;

九、结论

通过本文,我们使用了XGBoost算法对糖尿病数据集进行了分析和预测。我们利用了一系列与糖尿病相关的特征,并通过可视化工具展示了特征的重要性。实验结果表明,我们的模型在测试集上取得了不错的准确率。然而,需要注意的是,这只是一个简单的示例,实际应用中可能需要更多的数据预处理、特征工程和模型调优来提高模型的性能。

相关推荐
木头程序员4 分钟前
大模型边缘部署突破:动态推理技术与精度-延迟-能耗帕累托优化
大数据·人工智能·计算机视觉·自然语言处理·智能手机·数据挖掘
DX_水位流量监测6 分钟前
无人机测流之雷达流速仪监测技术分析
大数据·网络·人工智能·数据分析·自动化·无人机
昨日之日20066 分钟前
LTX-2 - 一键生成音视频,创作更轻松 支持50系显卡 ComfyUI工作流 一键整合包
人工智能·音视频·视频
imbackneverdie10 分钟前
Science最新文章:大型语言模型时代的科学生产
人工智能·语言模型·自然语言处理·aigc·ai写作
P-ShineBeam13 分钟前
八卡A100服务器坏卡引发 CUDA initialization: cudaGetDeviceCount()异常
运维·服务器·人工智能·语言模型
真上帝的左手15 分钟前
26. AI-框架工具-LangChain & LangGraph
人工智能·langchain
沛沛老爹17 分钟前
Web开发者进阶AI:Agent Skills-深度迭代处理架构——从递归函数到智能决策引擎
java·开发语言·人工智能·科技·架构·企业开发·发展趋势
赫尔·普莱蒂科萨·帕塔19 分钟前
医疗新纪元的开启
人工智能·chatgpt
m0_6038887122 分钟前
Scaling Trends for Multi-Hop Contextual Reasoning in Mid-Scale Language Models
人工智能·算法·ai·语言模型·论文速览
飞凌嵌入式22 分钟前
解析一下面向教育领域的RV1126B\RK3506B\RK3576开发板
linux·人工智能