机器学习算法构建预测糖尿病模型
创作时间:
作者:
@小白创作中心
机器学习算法构建预测糖尿病模型
引用
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()
总结
这段代码展示了一个完整的机器学习项目流程,从数据加载和探索性分析开始,到数据预处理、特征工程、模型选择和评估,最后使用主成分分析和支持向量机进行建模和优化。
热门推荐
房产证怎么加居住权需要什么资料
海带和什么菜搭配好吃?豆腐海鲜还是蔬菜?营养又解馋!
豆腐也能这么吃?这些炖煮搭配让你大开眼界!
2025年在职研究生是否需要过英语四六级?
非全日制研究生可以考四六级吗?
上海大学将推「五学期制」,你怎么看这个新变化?
皮鞋历史演变与现代设计趋势探讨
冬至是什么时候?冬至的具体日期和意义
盐水漱口的功效与作用
详细指南,如何从上海轻松前往乌镇
一文看懂QC快充协议的工作原理
无偿献血时,都有哪些措施在保障献血者的安全
设备工程师面试问题及回答技巧
中西医结合治疗肺癌转移胸膜有效吗
记号笔的清洗方法
生酮饮食能减肥,还能“饿死”癌细胞?真相来了
睡觉时会燃烧多少卡路里?能实现“躺瘦”吗?
如何恢复删除的微信聊天记录?实测有效,分享6个恢复小技巧
加强建筑工程工程质量管理措施是什么
黑燕麦片和白燕麦片哪个好?
君子兰使用兰陵王浇水的频率是多少?
君子兰宫廷花卉的养护和浇水技巧?
三大指标暗示,比特币尚未达到周期顶部!
“稳定情绪”的八条具体做法(真好用)
现场|“子曰”在上海,百余文物讲述孔子文化
梦境密码:周公解梦中捡手机的深层寓意
糖尿病患者必看!这三款面条低GI不升糖,吃上一大碗也安心!
4家AI公司同日推新品!大模型竞争新动向→
大数据技术发展趋势对人工智能的推动作用有多大
揭秘《封神演义》中的圣人师承:鸿钧老祖之外的神秘传承