🧑 博主简介:曾任某智慧城市类企业
算法总监
,目前在美国市场的物流公司从事高级算法工程师
一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN人工智能领域的优质创作者,提供AI相关的技术咨询、项目开发和个性化解决方案等服务,如有需要请站内私信或者联系任意文章底部的的VX名片(ID:xf982831907
)
💬 博主粉丝群介绍:① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。③ 群内也有职场精英,大厂大佬,可交流技术、面试、找工作的经验。④ 进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬。⑤ 进群赠送CSDN评论防封脚本,送真活跃粉丝,助你提升文章热度。有兴趣的加文末联系方式,备注自己的CSDN昵称,拉你进群,互相学习共同进步。
【机器学习案列】糖尿病风险可视化及预测
- 一、引言
- 二、数据准备与探索
- 三、数据可视化
- 3.1 血糖水平(Glucose)与糖尿病结果(Outcome)的关系
- 3.2 血压(BloodPressure)与糖尿病结果(Outcome)的关系
- 3.3 体重指数(BMI)与糖尿病结果(Outcome)的关系
- 3.4 年龄(Age)与糖尿病结果(Outcome)的关系
- 3.5 特征之间的相关性热图
- 四、可视化数据分析结论
- 五、训练数据集制做
- 六、模型训练
- 七、模型预测与评估
- 八、特征重要度分析
- 九、结论
一、引言
糖尿病是一种日益普遍的慢性疾病,它影响着全球数百万人的生活质量。为了更好地理解糖尿病的发病机制和预测风险,本文将利用一组包含多种生理指标的糖尿病数据集进行可视化分析,并使用结合XGBoost算法,对糖尿病数据集进行分析和预测。接下来直接上代码:
二、数据准备与探索
首先,我们需要加载并探索数据集。我们将使用Python的pandas库来处理数据,并使用matplotlib和seaborn库来进行可视化。
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)的关系
# 设置绘图风格
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)的关系
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)的关系
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)的关系
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 特征之间的相关性热图
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库来划分数据集和进行预处理,这里可以结合上面可视化的结果来做一些特征工程,这里将不做处理,读者感兴趣可以自己进行相应的特征工程。
# 划分特征和标签
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算法来训练模型。
# 初始化XGBoost分类器
model = XGBClassifier(use_label_encoder=False, eval_metric='logloss')# 训练模型
model.fit(X_train, y_train)
七、模型预测与评估
训练完成后,我们可以使用测试集来评估模型的性能。
# 进行预测
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)
八、特征重要度分析
为了更好地理解数据,我们可以使用一些可视化工具来展示特征的重要性。
# 获取特征重要性
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算法对糖尿病数据集进行了分析和预测。我们利用了一系列与糖尿病相关的特征,并通过可视化工具展示了特征的重要性。实验结果表明,我们的模型在测试集上取得了不错的准确率。然而,需要注意的是,这只是一个简单的示例,实际应用中可能需要更多的数据预处理、特征工程和模型调优来提高模型的性能。