R1 心脏病预测

RNN模型预测心脏病

  • 🍨 本文为🔗365天深度学习训练营 中的学习记录博客
  • 🍖 原作者:K同学啊
    在机器学习领域,循环神经网络(RNNs, Recurrent Neural Networks)因其处理序列数据的强大能力而广泛应用于时间序列分析、自然语言处理等任务。在这篇博客中,这周学习如何使用RNN来预测心脏病,并逐步讲解代码实现。

1. 项目背景

使用RNN模型来预测心脏病的发病情况。数据集包含了多种影响心脏病的特征,如年龄、性别、血压等。我们的目标是训练一个模型,根据这些特征预测患者是否患有心脏病。

2. 数据预处理

在开始构建模型之前,首先需要对数据进行处理。以下是主要的步骤:

  1. 加载并检查数据: 使用Pandas加载数据集,查看数据的基本信息。
  2. 特征与标签分离: 我们将数据集中的特征(X)和标签(y)分开。标签是我们要预测的目标,而特征则是模型的输入。
  3. 数据集划分: 将数据集划分为训练集和测试集。
  4. 标准化处理: 对特征进行标准化,使其符合标准正态分布。这一步非常重要,因为它能帮助模型更快地收敛。
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split

df = pd.read_csv("heart.csv")

X = df.iloc[:,:-1]
y = df.iloc[:,-1]

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1, random_state=1)

sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

X_train = X_train.reshape(X_train.shape[0], X_train.shape[1], 1)
X_test = X_test.reshape(X_test.shape[0], X_test.shape[1], 1)

3. 构建RNN模型

接下来构建RNN模型,并使用它来预测心脏病。

3.1 模型结构

我们使用Keras中的Sequential模型,逐层添加模型的各个部分:

  1. SimpleRNN层: RNN的基本单元,具有200个神经元。input_shape参数指定输入的形状,激活函数使用ReLU
  2. 全连接层: 添加一个具有100个神经元的全连接层,同样使用ReLU激活函数。
  3. 输出层: 最后是一个输出层,使用sigmoid激活函数输出二分类结果。
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, SimpleRNN

model = Sequential()
model.add(SimpleRNN(200, input_shape=(13,1), activation='relu'))
model.add(Dense(100, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

model.summary()
3.2 编译与训练模型

在编译模型时,我们选择使用Adam优化器,学习率为1e-4。损失函数选择binary_crossentropy,因为这是一个二分类问题。我们在训练过程中还会监控模型在训练集和验证集上的表现。

import tensorflow as tf

opt = tf.keras.optimizers.Adam(learning_rate=1e-4)

model.compile(loss='binary_crossentropy',
              optimizer=opt,
              metrics=['accuracy'])

history = model.fit(X_train, y_train,
                    epochs=100,
                    batch_size=128,
                    validation_data=(X_test, y_test),
                    verbose=1)

4. 训练结果与可视化

训练完成后,我们可以使用Matplotlib将训练过程中的准确率和损失函数进行可视化。

import matplotlib.pyplot as plt

acc = history.history['accuracy']
val_acc = history.history['val_accuracy']

loss = history.history['loss']
val_loss = history.history['val_loss']

epochs_range = range(100)

plt.figure(figsize=(14, 4))
plt.subplot(1, 2, 1)
plt.plot(epochs_range, acc, label='Training Accuracy')
plt.plot(epochs_range, val_acc, label='Validation Accuracy')
plt.legend(loc='lower right')
plt.title('Training and Validation Accuracy')

plt.subplot(1, 2, 2)
plt.plot(epochs_range, loss, label='Training Loss')
plt.plot(epochs_range, val_loss, label='Validation Loss')
plt.legend(loc='upper right')
plt.title('Training and Validation Loss')
plt.show()

结果

在这里插入图片描述
在这里插入图片描述

5. 总结

这周学习了如何使用RNN模型来预测心脏病,构建了一个简单但有效的RNN模型,并对训练过程进行了可视化展示。为后续学习更复杂的网络结构(如LSTM或GRU)打下基础。

  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值