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

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通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算法对糖尿病数据集进行了分析和预测。我们利用了一系列与糖尿病相关的特征,并通过可视化工具展示了特征的重要性。实验结果表明,我们的模型在测试集上取得了不错的准确率。然而,需要注意的是,这只是一个简单的示例,实际应用中可能需要更多的数据预处理、特征工程和模型调优来提高模型的性能。

相关推荐
东姬AI6 分钟前
挖出948个内核漏洞、自动写补丁:GPT-6 Cyber把AI推进“实战岗“,内容行业还卡在哪一关?
人工智能·网络安全·openai·gpt-6
用户29914221968013 分钟前
GitHub 热榜项目:日榜(2026-11-10)
人工智能·开源·github
用户29914221968019 分钟前
AI 日报(2026年11月10日)
人工智能
QXWZ_IA38 分钟前
定位数据怎么推给 IoT 平台?消息协议选型与接入准备
网络·人工智能·物联网·安全
java_logo40 分钟前
Docker 部署 ReMe:轻松搭建 AI Agent 记忆管理平台
人工智能·docker·容器·ai agent·轩辕镜像·reme·agentscope-ai
硅谷秋水1 小时前
从VLM规划器到机器人智能体:面向依赖历史信息的操控任务自演化框架
人工智能·机器学习·语言模型·机器人
西安小哥1 小时前
端侧跑大模型,真正的门槛不在参数量:一次 596 秒到 10 秒的压缩路径复盘
前端·人工智能
Vex2une1 小时前
AI 渲染正在重写游戏美术的账本:提效、外包与新的门槛
人工智能·aigc·游戏美术·神经渲染·dlss 5·ai 渲染·游戏开发门槛
LabVIEW开发1 小时前
AI 如何接进 LabVIEW:链路怎么搭、边界在哪、还差什么
人工智能·驱动开发·labview
liferecords2 小时前
不训练一个参数,把图像编辑器变成视频编辑器:EditVid 的局部-全局拆解术
人工智能·llm·aigc·多模态