机器学习算法构建预测糖尿病模型
创作时间:
作者:
@小白创作中心
机器学习算法构建预测糖尿病模型
引用
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()
总结
这段代码展示了一个完整的机器学习项目流程,从数据加载和探索性分析开始,到数据预处理、特征工程、模型选择和评估,最后使用主成分分析和支持向量机进行建模和优化。
热门推荐
如何更好地驱动用户行为决策:福格行为模型的应用与实践
家族公司章程范本:确保企业顺利运作的关键
美国学校市制度的运作机制与影响
低钙血症是什么病
每天坚持10分钟正念冥想可以增进幸福感和对抗抑郁
如何分析股票市场的双涨停现象?双涨停后的市场趋势有哪些可能性和风险?
CE认证具体有哪些流程和费用?(国际贸易干货知识分享)
2亿像素的手机拍照效果不如相机?
癸卯大运遇癸卯流年岁运并临,流年遇丧门对谁不好
辣椒素的功效与作用:不只是调味品那么简单
点痣去大医院还是整形医院?如何选择更适合自己的医疗机构?
如何快速恢复精力
什么是真正的自动驾驶?一文了解
阿替普酶的介绍:功效与作用
阿替普酶是什么
一招治恶心的偏方
儿童流感,抗流感药物该怎么用?
【专硕巡展】公共管理专硕:推动社会和国家管理现代化的专业人才
英伟达削减超级电容需求,江海股份股价下跌的背后分析
全面解析:茶叶冲泡时间与更换频率指南
房产销售中的常见问题及解决方案
纯棉衣服上的霉点怎么清洗
您必须尝试的 8 大社交推理游戏
探索未解之谜!现代中国人的祖先,起源于非洲还是本土?
脂肪烃的性质及应用
短视频拍摄多少钱一个?一文带你深入了解市场行情
ENF、E0和E1级板材的区别:从甲醛释放量到价格全解析
甲型流感病毒核酸检测试剂盒检测
25岁韩星金赛纶身亡,韩媒:生前遭网暴
红细胞偏高的原因及危害有哪些