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

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

相关推荐
婷小主的保镖的学习日记2 小时前
一篇关于高等数理统计结合机器学习论文的撰写(如何撰写?)
人工智能·机器学习·概率论
玩AI的小胡子3 小时前
DeePseek结合PS!批量处理图片的方法教程
人工智能·aigc·deepseek·玩ai的小胡子
新加坡内哥谈技术3 小时前
OpenAI新商标申请曝光:AI硬件、机器人、量子计算全线布局?
人工智能·科技·深度学习·学习·语言模型
秉寒-CHO3 小时前
【3分钟极速部署】在本地快速部署deepseek
人工智能
计算机软件程序设计3 小时前
结合深度学习、自然语言处理(NLP)与多准则决策的三阶段技术框架,旨在实现从消费者情感分析到个性化决策
人工智能·深度学习·自然语言处理
金智维科技官方4 小时前
AI驱动的智能流程自动化是什么
人工智能·自动化
遇健李的幸运4 小时前
DeepSeek-R1 技术全景解析:从原理到实践的“炼金术配方” ——附多阶段训练流程图与核心误区澄清
人工智能
张3蜂4 小时前
PromptSource和LangChain哪个更好
人工智能·深度学习·机器学习·langchain