机器学习算法构建预测糖尿病模型
创作时间:
作者:
@小白创作中心
机器学习算法构建预测糖尿病模型
引用
CSDN
1.
https://m.blog.csdn.net/2301_77801940/article/details/139970359
糖尿病是一种常见的慢性疾病,其发病率在全球范围内呈上升趋势。据世界卫生组织报告,每年约有320万人死于糖尿病导致的并发症。因此,建立准确的糖尿病预测模型对于早期诊断和预防具有重要意义。本文将通过一个完整的机器学习项目流程,展示如何构建预测糖尿病的模型。
前言
世界卫生组织近日发布报告称,糖尿病患者的数量正以惊人的速度增长,目前全球每年约有320万人死于糖尿病导致的并发症。本项目旨在通过机器学习算法构建预测糖尿病模型。
一、数据收集
本项目使用的数据集包含以下特征:
- Pregnancies:怀孕次数
- Glucose:葡萄糖
- BloodPressure:血压 (mm Hg)
- SkinThickness:皮层厚度 (mm)
- Insulin:胰岛素 2小时血清胰岛素(mu U / ml)
- BMI:体重指数 (体重/身高)^2
- DiabetesPedigreeFunction:糖尿病谱系功能
- Age:年龄 (岁)
- Outcome:类标变量 (0或1)
二、模型构建
1.引入库
import warnings
warnings.filterwarnings('ignore')
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
2.数据加载与探索
首先加载数据集,并对数据进行基本的探索性分析,包括查看数据的基本信息、统计摘要、特征分布等。
# 加载数据
d = pd.read_csv('D:\Anconda\PimaIndiansdiabetes.csv')
# 数据探索
d.head() # 查看数据的前几行
d.info() # 查看数据的基本信息,包括列名、非空值数量、数据类型等
d.isnull().sum().sum() # 检查是否有缺失值
d.shape, d.keys(), type(d) # 查看数据集的形状、列名和数据类型
d.describe() # 数值型特征的统计摘要信息
d.groupby('Outcome').size() # 查看目标变量的分布情况
3.数据可视化分析
通过直方图、散点图、箱线图等方式,对数据进行可视化和深入分析,了解各个特征之间的关系和分布情况。
# 绘制直方图和散点图
d.hist(figsize=(16, 14))
sns.pairplot(d, vars=d.columns, hue='Outcome') # 绘制特征之间的散点图矩阵,按照Outcome(结果)着色
sns.pairplot(d, vars=d.columns[:-1], hue='Outcome') # 排除最后一个变量(Outcome)的散点图矩阵
sns.pairplot(d, diag_kind='hist') # 对角线上为直方图的散点图矩阵
d.plot(kind='box', subplots=True, layout=(3,3), sharex=False, sharey=False, figsize=(16,14)) # 绘制箱线图
4.数据预处理和特征工程
包括特征选择(利用SelectKBest和卡方检验选择重要特征)、数据标准化等步骤,以便后续模型训练使用。
# 特征选择
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
X = d.iloc[:, 0:8] # 特征变量
Y = d.iloc[:, 8] # 目标变量
select_top_4 = SelectKBest(score_func=chi2, k=4) # 选择排名前4的特征
fit = select_top_4.fit(X, Y)
features = fit.transform(X)
X_features = pd.DataFrame(data=features, columns=['Glucose', 'Insulin', 'BMI', 'Age']) # 选取的特征变量
# 数据标准化
from sklearn.preprocessing import StandardScaler
rescaledX = StandardScaler().fit_transform(X_features) # 标准化特征变量
X = pd.DataFrame(data=rescaledX, columns=X_features.columns)
5.模型建立和评估
选择了多个分类模型(逻辑回归、朴素贝叶斯、K近邻、决策树、支持向量机),使用交叉验证评估模型性能,并输出平均准确率。
#数据集划分
from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, random_state=2019, test_size=0.2)
#模型选择和建立
from sklearn.linear_model import LogisticRegression
from sklearn.naive_bayes import GaussianNB
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
models = []
models.append(("LR", LogisticRegression())) # 逻辑回归
models.append(("NB", GaussianNB())) # 高斯朴素贝叶斯
models.append(("KNN", KNeighborsClassifier())) # K近邻分类
models.append(("DT", DecisionTreeClassifier())) # 决策树分类
models.append(("SVM", SVC())) # 支持向量机分类
#模型评估
import warnings
warnings.filterwarnings('ignore')
results = []
names = []
for name, model in models:
kfold = KFold(n_splits=10)
cv_result = cross_val_score(
model, X_train, Y_train, cv=kfold, scoring='accuracy')
names.append(name)
results.append(cv_result)
#输出模型评估结果
for i in range(len(names)):
print(names[i], results[i].mean())
6.主成分分析(PCA)和支持向量机(SVM)模型
使用PCA将高维数据降低到二维,然后使用SVM进行分类,并通过混淆矩阵和分类报告评估模型的性能。同时,利用网格搜索优化SVM的超参数。
from sklearn.decomposition import KernelPCA
# 使用KernelPCA进行主成分分析
kpca = KernelPCA(n_components=2, kernel='rbf')
X_train_pca = kpca.fit_transform(X_train)
X_test_pca = kpca.transform(X_test)
# 可视化PCA降维后的数据
plt.figure(figsize=(10, 8))
plt.scatter(X_train_pca[:, 0], X_train_pca[:, 1], c=Y_train, cmap='plasma')
plt.xlabel("First principal component")
plt.ylabel("Second principal component")
# 使用SVM进行分类
from sklearn.svm import SVC
from sklearn.metrics import classification_report, confusion_matrix
classifier = SVC(kernel='rbf')
classifier.fit(X_train_pca, Y_train)
# 在测试集上进行预测并评估模型性能
y_pred = classifier.predict(X_test_pca)
cm = confusion_matrix(Y_test, y_pred) # 混淆矩阵
print(cm)
print(classification_report(Y_test, y_pred))
# 使用网格搜索优化SVM模型的超参数
from sklearn.model_selection import GridSearchCV
param_grid = {'C': [0.1, 1, 10, 100], 'gamma': [1, 0.1, 0.01, 0.001]}
grid = GridSearchCV(SVC(), param_grid, refit=True, verbose=2)
grid.fit(X_train_pca, Y_train)
# 输出最优模型的分类报告
grid_predictions = grid.predict(X_test_pca)
print(classification_report(Y_test, grid_predictions))
7.结果可视化
使用箱线图展示不同模型的交叉验证结果分布。
# 结果可视化
ax = sns.boxplot(data=results)
ax.set_xticklabels(names)
plt.show()
总结
这段代码展示了一个完整的机器学习项目流程,从数据加载和探索性分析开始,到数据预处理、特征工程、模型选择和评估,最后使用主成分分析和支持向量机进行建模和优化。
热门推荐
从象征到现实——贺綾声诗歌的情感与意象剖析
深度学习模型命名的艺术:如何打造既高大上又易懂的模型名称?
敦煌文化:海纳百川的典范
Jefferson中心教你管理紧张情绪,提升医疗操作表现
去云南腾冲旅游要注意什么:安全事项、必备物品与攻略
为贫民窟男孩取名:五个寓意深刻的名字建议
勒布朗·詹姆斯:从天之骄子到全美公敌,再到活着的传奇
如何给你的角色取个金庸级别的名字?
掌握撒娇艺术,让你成为社交达人!
手动挡神操作:从三档直接挂一档!
高中学习,拼的是“聪明努力”,而不是“盲目奋斗”
山地车车架材质全解析:碳纤维、钛质、铝质和钢质的优缺点对比
哈密瓜几月份吃是正季?看看,别买错了!
周易与奇门遁甲:解密两大预测系统的原理与应用
奇门遁甲的使用技巧与注意事项
世界事件如何影响黄金的价值?
流体剪切应力:内皮细胞的“健身教练”
男性婚姻选择背后的那些心理秘密
八字合婚:传统婚配预测的现代意义
移民美国需要花多少钱?详解移民美国的费用与投资回报
春节催婚大作战:用创意和智慧化解尴尬
催婚背后:传统与现实的碰撞
血压高偏头痛挂什么科
各类ETF基金的特点是什么?掌握这些特点有何要点?
揭秘退休金计算:如何规划您的退休生活,享受无忧晚年?
2024年社会责任感趋势洞察分析:快速消费品品牌如何满足消费者的社会意识期望
古装剧迭代:彰显审美自觉与文化自信
血糖高可以吃钙片吗?这份补钙指南请收好
女性补钙:如何选择适合自己的钙片?
秋冬午后,在阳光下享受静谧时光