当前位置:   article > 正文

Python深度学习TensorFlow Keras心脏病预测神经网络模型评估损失曲线、混淆矩阵可视化...

keras的深度学习预测疾病

全文链接:https://tecdat.cn/?p=36575

随着深度学习技术的快速发展,高效的计算框架和库对于模型训练至关重要。TensorFlow作为目前最流行的深度学习框架之一,其GPU版本能够显著提升模型训练的速度和效率点击文末“阅读原文”获取完整代码数据)。

相关视频

本研究旨在通过安装TensorFlow-GPU的特定版本,并结合其他数据处理和可视化库,为深度学习模型的构建提供一套完整的数据处理流程。

心脏病作为一种严重的健康问题,其早期预测和诊断对于提高治疗效果和患者生活质量具有重要意义。近年来,深度学习技术在医疗领域的应用日益广泛,特别是在疾病预测和诊断方面。本研究旨在帮助客户利用TensorFlow Keras库构建一个基于深度学习的心脏病预测模型,并通过实验验证其有效性。

TensorFlow-GPU安装

为了充分利用GPU加速深度学习模型的训练,我们首先安装了TensorFlow-GPU的2.0.0-alpha0版本。通过以下命令在Python环境中进行安装:

!pip install tensorflow-gpu==2.0.0-alpha0

e2837ac52da8c59b333ab7405799288e.png

数据预处理与可视化

本研究使用了NumPy、Pandas、Seaborn等库进行数据预处理和可视化。首先,我们导入了相关库,并设置了随机种子以确保实验的可重复性:

  1. %matplotlib inline
  2. sns.set(style='whitegrid', palette='muted', font_scale=1.5)

接下来,我们利用Pandas库的describe()方法对数据进行描述性统计分析,以便对数据的分布和特性有一个初步的了解。

data.describe()

f249b9b0994b59ebf87717ee88afc8f9.png

数据可视化

对心脏病诊断数据集进行了深入分析。利用Seaborn和Matplotlib等可视化库,本研究绘制了多种图表以展示心脏病存在情况的分布、患者年龄分布、性别对疾病存在的影响以及胸痛类型与疾病存在之间的关系。

心脏病存在情况分布

通过Seaborn的countplot函数,我们绘制了心脏病存在情况的分布图。结果显示,数据集中心脏病存在的患者数量略高于不存在心脏病的患者。

4a2ca687f04e93a172048e25b7905487.jpeg

性别对心脏病存在的影响

为了分析性别对心脏病存在的影响,我们根据性别对心脏病存在情况进行了分组可视化。结果显示,男性患者中心脏病存在的比例略高于女性患者。

c86c719a246baf25aad7187201cbbcf8.jpeg


点击标题查阅往期内容

b5bb6339eb22f9c66db0e688ba4f87fd.png

Python中TensorFlow的长短期记忆神经网络(LSTM)、指数移动平均法预测股票市场和可视化

outside_default.png

左右滑动查看更多

outside_default.png

01

c36a5c877f5581947a1e10b62a0f88ac.png

02

5c06b7ec36868d73f5d4154f0a4736bf.png

03

246daac333392c84ad0b13bc22255182.jpeg

04

a5ffb65b17f597f30188f9404e58db68.png

相关性分析

为了了解数据集中不同特征之间的相关性,我们绘制了相关性热图。结果显示,某些特征与心脏病存在情况之间存在较强的相关性。

heat_map.set_xticklabels(heat_map.get_xticklabels(), rotation=45);

e24771977e754078e8545509b2e4029a.png

年龄与最大心率散点图

通过绘制年龄与最大心率的散点图,我们分析了年龄与最大心率之间的关系。结果显示,随着年龄的增长,最大心率呈下降趋势。

plt.scatter(x=data.age[data.target==0], y=data.thalach[(data.target==0)], s=60)

2f185796937acec3b370bc0091c5141c.jpeg

患者年龄分布

通过年龄分组并绘制条形图,我们分析了不同疾病状态下患者的年龄分布。结果显示,年龄较大的人群中心脏病存在的比例更高。

data[data['target']==0].groupby('Age_Category')['age'].count().plot(kind='bar')

7631ced12cf810cbb9ac7434b0977d2f.png

胸痛类型与心脏病存在之间的关系

利用countplot函数,我们分析了不同胸痛类型与心脏病存在之间的关系。结果显示,典型心绞痛和无症状胸痛的患者中心脏病存在的比例较高。

f = sns.countplot(x='cp', data=data, hue='target') f.set_xticklabels(['Typical Angina', 'Atypical Angina', 'Non-anginal Pain', 'Asymptomatic']);

1d3df6013bc5bf15758701bd0c4970ae.png

通过对心脏病诊断数据集的可视化分析,我们得出了以下结论:

  1. 数据集中心脏病存在的患者数量略高于不存在心脏病的患者。

  2. 男性患者中心脏病存在的比例略高于女性患者。

  3. 年龄较大的人群中心脏病存在的比例更高。

  4. 典型心绞痛和无症状胸痛的患者中心脏病存在的比例较高。

  5. 数据集中某些特征与心脏病存在情况之间存在较强的相关性。

基于TensorFlow Keras的心脏病预测模型构建与评估

该模型采用了一个序列化的网络结构,其中包括特征嵌入层、两个具有ReLU激活函数的隐藏层、一个Dropout层以及一个具有Sigmoid激活函数的输出层。模型通过二元交叉熵损失函数和Adam优化器进行训练,并在训练过程中监控准确率和验证准确率。实验结果显示,模型在测试集上达到了88.52%的准确率。

本研究采用TensorFlow Keras库构建了一个序列化的神经网络模型。模型结构如下:

  1. 特征嵌入层:使用DenseFeatures层将输入特征进行嵌入,其中feature_columns参数定义了特征列。

  2. 隐藏层:包含两个具有128个神经元和ReLU激活函数的Dense层,用于提取输入特征中的高级表示。

  3. Dropout层:在第二个隐藏层后添加一个Dropout层,以防止模型过拟合,设置dropout率为0.2。

  4. 输出层:使用具有单个神经元和Sigmoid激活函数的Dense层作为输出层,用于输出心脏病预测的概率。

模型编译时,采用Adam优化器和二元交叉熵损失函数,并设置监控准确率和验证准确率为评估指标。

model = tf.keras.models.Sequential([ tf.keras.layers.DenseFeatures(feature_columns=feature_columns), tf.keras.layers.Dense(units=128, activation='relu'), tf.keras.layers.Dropout(rate=0.2), tf.keras.layers.Dense(units=128, activation='relu'),

ea4cc0cc27a21650a3171f35809be4e8.png

性能评估

model.evaluat

fffd189e6724daf4cb30c887f30eb990.png

模型在训练集上进行训练,并在验证集上进行验证。训练过程共进行了100个epoch,每个epoch包含对训练集的完整遍历。在训练过程中,我们记录了每个epoch的准确率和验证准确率。

实验结果显示,模型在训练集上的准确率随着epoch的增加而逐渐提高,最终在验证集上达到了88.52%的准确率。同时,我们也注意到在训练过程中存在轻微的过拟合现象,这可能是由于数据集规模较小或模型复杂度较高所致。

为了进一步验证模型的有效性,我们在测试集上对模型进行了评估。评估结果显示,模型在测试集上的准确率为88.52%,与验证集上的准确率一致。这表明模型具有良好的泛化能力,可以在未见过的数据上进行准确预测。

为了更直观地展示模型的训练过程,我们绘制了准确率和验证准确率的曲线图。从图中可以看出,模型在训练初期迅速提高准确率,随后进入平稳期。验证准确率在整个训练过程中保持稳定,表明模型没有出现过拟合或欠拟合现象。

plt.plot(history.history['accuracy']) plt.plot(history.history['val_accuracy'])

2dd8b4b77835ad42c2c84e36acc94b1f.jpeg

损失曲线分析

为了更直观地了解模型的训练过程,我们绘制了训练集和验证集上的损失曲线。通过matplotlib库,我们分别绘制了训练损失(loss)和验证损失(val_loss)随epoch变化的曲线图。从图中可以看出,随着训练的进行,训练损失和验证损失均呈现下降趋势,表明模型在逐渐学习并优化其预测能力。

plt.plot(history.history['loss']) plt.plot(history.history['val_loss']) plt.title('model loss') plt.ylabel('loss') plt.xlabel('epoch') plt.legend(['train', 'test'], loc='upper left') plt.show()

bca1fd022924c30a4ef09c306c66933f.png

分类报告与混淆矩阵

为了进一步评估模型在测试集上的性能,我们使用了sklearn库中的classification_reportconfusion_matrix函数。通过模型对测试集的预测结果和真实标签进行比较,我们得到了分类报告和混淆矩阵。分类报告提供了每个类别的精确度、召回率和F1分数,而混淆矩阵则直观地展示了模型在各类别上的预测情况。

print(classification_report(y_test.values, bin_predictions))

248b3d1af4c181cfe670ac6f47dd3baa.png

confusion_matrix(y_test,

40206e53a47bb04e61f2fa7c116bfdc9.png

分类报告显示,模型在测试集上的整体精确度为0.62,召回率为0.62,F1分数为0.62。混淆矩阵则显示,模型在预测为0(无心脏病)的类别中有19个正确预测,但有10个误判;在预测为1(有心脏病)的类别中有19个正确预测,但有13个误判。这些结果表明,虽然模型在整体性能上表现良好,但在某些类别上仍存在一定的误判情况。

sns.heatmap(pd.DataFrame(cnf_matrix),annot=

1410e7eacd4ae6c229900be88b473b67.png

结论

本研究通过构建和评估一个基于TensorFlow Keras的心脏病预测模型,展示了深度学习在医疗领域的应用潜力。通过绘制损失曲线、生成分类报告和混淆矩阵等方法,我们全面评估了模型的性能,并发现模型在测试集上取得了良好的预测效果。未来研究可以进一步探索如何优化模型结构、增加数据集规模以及引入更多的特征工程方法,以提高模型的预测性能和泛化能力。


资料获取

在公众号后台回复“领资料”,可免费获取数据分析、机器学习、深度学习等学习资料。

012457f12568df7fac3678d26ad7582b.jpeg

点击文末“阅读原文”

获取全文完整代码数据资料。

本文选自《Python深度学习TensorFlow Keras心脏病预测神经网络模型评估损失曲线、混淆矩阵可视化》。

点击标题查阅往期内容

RNN循环神经网络 、LSTM长短期记忆网络实现时间序列长期利率预测

结合新冠疫情COVID-19股票价格预测:ARIMA,KNN和神经网络时间序列分析

深度学习:Keras使用神经网络进行简单文本分类分析新闻组数据

用PyTorch机器学习神经网络分类预测银行客户流失模型

PYTHON用LSTM长短期记忆神经网络的参数优化方法预测时间序列洗发水销售数据

Python用Keras神经网络序列模型回归拟合预测、准确度检查和结果可视化

R语言深度学习卷积神经网络 (CNN)对 CIFAR 图像进行分类:训练与结果评估可视化

深度学习:Keras使用神经网络进行简单文本分类分析新闻组数据

Python用LSTM长短期记忆神经网络对不稳定降雨量时间序列进行预测分析

R语言深度学习Keras循环神经网络(RNN)模型预测多输出变量时间序列

R语言KERAS用RNN、双向RNNS递归神经网络、LSTM分析预测温度时间序列、 IMDB电影评分情感

Python用Keras神经网络序列模型回归拟合预测、准确度检查和结果可视化

Python用LSTM长短期记忆神经网络对不稳定降雨量时间序列进行预测分析

R语言中的神经网络预测时间序列:多层感知器(MLP)和极限学习机(ELM)数据分析报告

R语言深度学习:用keras神经网络回归模型预测时间序列数据

Matlab用深度学习长短期记忆(LSTM)神经网络对文本数据进行分类

R语言KERAS深度学习CNN卷积神经网络分类识别手写数字图像数据(MNIST)

MATLAB中用BP神经网络预测人体脂肪百分比数据

Python中用PyTorch机器学习神经网络分类预测银行客户流失模型

R语言实现CNN(卷积神经网络)模型进行回归数据分析

SAS使用鸢尾花(iris)数据集训练人工神经网络(ANN)模型

【视频】R语言实现CNN(卷积神经网络)模型进行回归数据分析

Python使用神经网络进行简单文本分类

R语言用神经网络改进Nelson-Siegel模型拟合收益率曲线分析

R语言基于递归神经网络RNN的温度时间序列预测

R语言神经网络模型预测车辆数量时间序列

R语言中的BP神经网络模型分析学生成绩

matlab使用长短期记忆(LSTM)神经网络对序列数据进行分类

R语言实现拟合神经网络预测和结果可视化

用R语言实现神经网络预测股票实例

使用PYTHON中KERAS的LSTM递归神经网络进行时间序列预测

python用于NLP的seq2seq模型实例:用Keras实现神经网络机器翻译

用于NLP的Python:使用Keras的多标签文本LSTM神经网络分类

6df477c372956997861953dba7b6a8f0.jpeg

b3f08df325f0afe404af899cd8a59416.png

731dd602c954d41610fb40d0c758bf24.png

b309a02360ed128521c23c98cb8b1272.jpeg

188573a190b3fe1f82e66f39c1858918.png

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/803166
推荐阅读
相关标签
  

闽ICP备14008679号