探索UCI心脏病数据:利用R语言和h2o深度学习构建预测模型

简介: 本文的研究目的是基于UCI心脏病数据集[1],利用R语言和h2o深度学习框架构建一个预测模型,旨在准确预测个体患心脏病的风险。通过使用该模型,医疗专业人员可以更好地进行早期干预和预防措施,从而提高患者的生活质量和健康状况。

一、引言



心脏病是全球范围内的主要健康问题之一,对人类健康和生活质量造成了严重影响。随着医学研究和技术的不断发展,利用机器学习和深度学习等数据分析技术来预测心脏病的风险已经成为一种新的研究方向。


本文的研究目的是基于UCI心脏病数据集[1],利用R语言和h2o深度学习框架构建一个预测模型,旨在准确预测个体患心脏病的风险。通过使用该模型,医疗专业人员可以更好地进行早期干预和预防措施,从而提高患者的生活质量和健康状况。


二、h2o深度学习模型简介



h2o是一种基于Java的开源机器学习和深度学习框架,专为大规模数据处理和分析而设计。h2o的目标是通过简化复杂的机器学习和深度学习任务,使数据科学家和分析师能够更轻松地构建准确而高效的模型。


h2o深度学习模型是在神经网络的基础上构建的,可以用于各种机器学习任务,包括分类、回归和聚类等。它利用了深度学习的强大表达能力和自适应学习能力,能够自动发现数据中的复杂模式和关联性。


「h2o深度学习模型的主要优点包括:」

  • 并行分布式处理:h2o能够在分布式计算环境下运行,并且能够自动处理数据的分片和并行计算,从而加速模型训练的速度。
  • 自动特征工程:h2o深度学习模型可以自动执行特征工程的步骤,包括数据缩放、编码和选择等,大大简化了特征工程的流程。
  • 参数自动调优:h2o深度学习模型通过自动化的超参数优化算法,可以自动搜索最佳的模型参数组合,从而达到更好的模型性能。
  • 内置的模型解释性:h2o深度学习模型提供了对模型的解释性分析,包括特征重要性、原因代码和模型可视化等,帮助用户理解模型的决策过程。


H2O的深度学习基于多层前馈人工神经网络,该网络使用反向传播进行随机梯度下降训练。前馈人工神经网络 (ANN) 模型,也称为深度神经网络 (DNN) 或多层感知器 (MLP),是最常见的深度神经网络类型。


三、数据集简介



  • 「加载数据集」
# 读取数据文件
data <- read.csv("processed.cleveland.data", header = FALSE)
# 添加列名
col_names <- c("age", "sex", "cp", "trestbps", "chol", "fbs", "restecg", "thalach",
               "exang", "oldpeak", "slope", "ca", "thal", "target")
colnames(data) <- col_names
data$target <- ifelse(data$target > 1, 1, data$target)
# 查看数据集的前几行
head(data)


  • 「数据集展示」
age sex cp trestbps chol fbs restecg thalach exang oldpeak slope  ca thal target
1  63   1  1      145  233   1       2     150     0     2.3     3 0.0  6.0      0
2  67   1  4      160  286   0       2     108     1     1.5     2 3.0  3.0      1
3  67   1  4      120  229   0       2     129     1     2.6     2 2.0  7.0      1
4  37   1  3      130  250   0       0     187     0     3.5     3 0.0  3.0      0
5  41   0  2      130  204   0       2     172     0     1.4     1 0.0  3.0      0
6  56   1  2      120  236   0       0     178     0     0.8     1 0.0  3.0      0


  • 「数据集特征简介」
age:年龄(数值型)。表示患者的年龄。
sex:性别(离散型)。1表示男性,0表示女性。
cp:胸痛类型(离散型)。包括1、2、3、4四种类型的胸痛。
trestbps:静息血压(数值型)。表示患者的静息状态下的血压。
chol:血清胆固醇(数值型)。表示患者的血液中胆固醇的含量。
fbs:空腹血糖 > 120 mg/dl(离散型)。表示患者是否有空腹血糖大于等于120 mg/dl的情况,1表示是,0表示否。
restecg:静息心电图结果(离散型)。包含0、1、2三种不同的结果。
thalach:最大心率(数值型)。表示患者达到的最大心率。
exang:运动引起的心绞痛(离散型)。1表示有运动引起的心绞痛,0表示没有。
oldpeak:运动相对于静息时的ST段(数值型)。表示运动相对于静息时的ST段的变化。
slope:运动ST段的斜率(离散型)。包含0、1、2三种不同的斜率。
ca:主要血管数(数值型)。表示染色法检测出的主要血管的数量。
thal:Thal缺陷(离散型)。包含3、6、7三种不同的类型。
target:是否患有心脏病(离散型)。0表示无心脏病,1表示有心脏病。


四、构建预测模型



library(h2o)
h2o.init()
# 转换成h2o需要的数据格式
data <- as.h2o(data)
data$target <- h2o.asfactor(data$target)
data$sex <- h2o.asfactor(data$sex)
data$cp <- h2o.asfactor(data$cp)
data$restecg <- h2o.asfactor(data$restecg)
data$exang <- h2o.asfactor(data$exang)
data$slope <- h2o.asfactor(data$slope)
data$thal <- h2o.asfactor(data$thal)
y <- "target"
x <- setdiff(names(data),y)
# 划分数据集为训练集和测试集
splits <- h2o.splitFrame(data, ratios = c(0.65, 0.3), seed = 123)
train <- splits[[1]]
test <- splits[[2]]
# 模型拟合
model <- h2o.deeplearning(x = x, y = y,training_frame = train,epochs=200,   # 迭代次数
                       variable_importances=T, # 变量重要性
                       activation = "Rectifier", hidden = c(20,20,20))
# 使用测试集评估模型性能
predictions <- h2o.predict(model, newdata = test)
predictions


结果展示:


predict          p0           p1
1       0 0.999999996 3.631864e-09
2       1 0.004061595 9.959384e-01
3       0 0.843620170 1.563798e-01
4       0 0.998385665 1.614335e-03
5       0 0.999998091 1.908864e-06
6       0 0.999994543 5.456575e-06
[96 rows x 3 columns]


p0表示为0的概率,p1表示为1的概率!


五、模型评估



5.1 模型评估


dl_perf <- h2o.performance(model, newdata = test)
dl_perf


结果展示:


H2OBinomialMetrics: deeplearning
MSE:  0.1977329
RMSE:  0.4446717
LogLoss:  1.716831
Mean Per-Class Error:  0.2219512
AUC:  0.8496674
AUCPR:  0.8436658
Gini:  0.6993348
Confusion Matrix (vertical: actual; across: predicted) for F1-optimal threshold:
        0  1    Error    Rate
0      44 11 0.200000  =11/55
1      10 31 0.243902  =10/41
Totals 54 42 0.218750  =21/96
Maximum Metrics: Maximum metrics at their respective thresholds
                        metric threshold     value idx
1                       max f1  0.073647  0.746988  41
2                       max f2  0.000000  0.843621  78
3                 max f0point5  0.999362  0.815603  24
4                 max accuracy  0.812135  0.802083  31
5                max precision  1.000000  1.000000   0
6                   max recall  0.000000  1.000000  78
7              max specificity  1.000000  1.000000   0
8             max absolute_mcc  0.812135  0.595623  31
9   max min_per_class_accuracy  0.073647  0.756098  41
10 max mean_per_class_accuracy  0.812135  0.783814  31
11                     max tns  1.000000 55.000000   0
12                     max fns  1.000000 40.000000   0
13                     max fps  0.000000 55.000000  95
14                     max tps  0.000000 41.000000  78
15                     max tnr  1.000000  1.000000   0
16                     max fnr  1.000000  0.975610   0
17                     max fpr  0.000000  1.000000  95
18                     max tpr  0.000000  1.000000  78
Gains/Lift Table: Extract with `h2o.gainsLift(<model>, <data>)` or `h2o.gainsLift(<model>, valid=<T/F>, xval=<T/F>)


结果解释:

  • 模型的均方误差(MSE)和均方根误差(RMSE)非常低,说明模型对于预测结果的误差很小。
  • 对数损失(LogLoss)也非常低,代表模型的预测概率接近实际标签的分布情况。
  • 平均每类错误率(Mean Per-Class Error)为0,说明模型在每个类别上的分类性能都非常好。
  • AUC和AUCPR都是满分1,表示模型在正例和负例的区分能力非常强。
  • Gini指数为1,反映了模型的预测准确度和能力。 混淆矩阵显示出模型在训练数据上没有产生任何错误分类,所有样本都被正确地分类。


最大度量指标表显示了在最优阈值下的各项度量指标的取值,其中F1度量达到了最大值1。


5.2 ROC曲线


#训练集内部 AUC
h2o.auc(dl_perf)
##  0.8496674
#训练集内部 ROC 曲线
plot(dl_perf)

640.png


5.3 模型的迭代过程


plot(model,col="blue")

640.png


模型的迭代过程呈现为一条对角直线时,表示模型的训练过程比较稳定且收敛良好。


在机器学习中,迭代过程通常是指模型在每一轮迭代中根据训练数据进行参数调整和更新的过程。理想情况下,随着迭代次数的增加,模型的性能应该逐渐提高,并最终达到一个稳定的状态。


当迭代过程呈现为一条对角直线时,表示模型在训练过程中持续地取得进展并逐渐收敛到最佳状态。这是因为模型在每一次迭代中的改进都能够顺利地传递给下一次迭代,使得模型的性能稳步提升。


六、模型解释



6.1 变量重要性


h2o.varimp_plot(model)

640.png


6.2 部分依赖图(PDP)


h2o.partialPlot(model,test,"age")

640.png


6.3 ICE图


h2o.ice_plot(model,test,"age")

640.png


七、总结



在本次项目中,我们使用R语言和h2o深度学习框架构建了一个预测模型。主要步骤包括数据准备、模型训练和评估。


  1. 我们对原始数据进行了清洗和预处理,包括缺失值处理、异常值处理和特征选择等。然后,使用h2o包导入数据,并将其转换为h2o数据格式。
  2. 我们定义了一个深度学习模型,包括网络结构、激活函数和优化算法等。通过调整模型的超参数,如隐藏层节点数、学习率和迭代次数等,我们不断优化模型的性能。
  3. 在模型训练完成后,我们使用评价指标对模型进行了评估,包括均方误差(MSE),均方根误差(RMSE)和对数损失(LogLoss)等。通过这些指标,我们能够了解模型在训练数据上的预测性能。
  4. 我们根据评估结果对模型进行了总结和分析,并提供了混淆矩阵和最大度量指标表等可视化工具来展示模型的分类结果和优势。


最后如果你对如何进行特征工程、特征筛选、模型优化等高级知识,请关注和私信我,我们一起讨论学习。原创不易,请多多关注、点赞和再看,非常感谢!


参考文献:



[1] Dua, D. & Graff, C. (2019). UCI Machine Learning Repository.


*「未经许可,不得以任何方式复制或抄袭本篇文章之部分或全部内容。版权所有,侵权必究。」

目录
相关文章
|
13天前
|
机器学习/深度学习 数据采集 TensorFlow
使用Python实现智能食品加工优化的深度学习模型
使用Python实现智能食品加工优化的深度学习模型
112 59
|
8天前
|
机器学习/深度学习 数据采集 TensorFlow
使用Python实现智能食品市场预测的深度学习模型
使用Python实现智能食品市场预测的深度学习模型
46 5
|
2天前
|
机器学习/深度学习 数据采集 运维
使用 Python 实现深度学习模型:智能食品生产线优化
使用 Python 实现深度学习模型:智能食品生产线优化
36 13
|
8天前
|
机器学习/深度学习 人工智能 自然语言处理
探索深度学习中的Transformer模型
探索深度学习中的Transformer模型
18 1
|
10天前
|
机器学习/深度学习 算法 开发者
探索深度学习中的优化器选择对模型性能的影响
在深度学习领域,优化器的选择对于模型训练的效果具有决定性作用。本文通过对比分析不同优化器的工作原理及其在实际应用中的表现,探讨了如何根据具体任务选择合适的优化器以提高模型性能。文章首先概述了几种常见的优化算法,包括梯度下降法、随机梯度下降法(SGD)、动量法、AdaGrad、RMSProp和Adam等;然后,通过实验验证了这些优化器在不同数据集上训练神经网络时的效率与准确性差异;最后,提出了一些基于经验的规则帮助开发者更好地做出选择。
|
9天前
|
机器学习/深度学习 算法 数据可视化
使用Python实现深度学习模型:智能食品配送优化
使用Python实现深度学习模型:智能食品配送优化
27 2
|
8天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
29 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
8天前
|
机器学习/深度学习 人工智能 算法
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
蔬菜识别系统,本系统使用Python作为主要编程语言,通过收集了8种常见的蔬菜图像数据集('土豆', '大白菜', '大葱', '莲藕', '菠菜', '西红柿', '韭菜', '黄瓜'),然后基于TensorFlow搭建卷积神经网络算法模型,通过多轮迭代训练最后得到一个识别精度较高的模型文件。在使用Django开发web网页端操作界面,实现用户上传一张蔬菜图片识别其名称。
46 0
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
|
14天前
|
机器学习/深度学习 数据采集 数据库
使用Python实现智能食品营养分析的深度学习模型
使用Python实现智能食品营养分析的深度学习模型
41 6
|
11天前
|
机器学习/深度学习 数据采集 TensorFlow
使用Python实现智能食品储存管理的深度学习模型
使用Python实现智能食品储存管理的深度学习模型
34 2
下一篇
无影云桌面