本文为365天深度学习训练营 中的学习记录博客
原作者:K同学啊|接辅导、项目定制
我的环境:
1.语言:python3.7
2.编译器:pycharm
本周通过构建RNN网络来对心脏病数据集进行分析。
1、RNN介绍:
循环神经网络(Recurrent Neural Network)是一种在序列数据上进行处理的深度学习模型。相比于传统的前馈神经网络,RNN的独特之处在于其具有记忆能力,可以在处理序列数据时保留并利用之前的信息。
RNN的主要特点是引入了循环结构,允许信息从一个时间步传递到下一个时间步。这种结构使得RNN在处理序列数据时能够建立上下文关系,更好地捕捉序列中的时序依赖关系。
RNN的基本单元是循环单元(recurrent unit),它可以看作是一个带有权重的函数,接受当前时间步的输入和上一时间步的隐藏状态,并输出当前时间步的隐藏状态。
RNN可以应用于多种任务,如自然语言处理、语音识别、机器翻译、图像描述生成等。在自然语言处理方面,RNN可以用于语言模型的建模,序列标注(如命名实体识别、词性标注)、情感分析、文本生成等任务。
RNN是一种适用于序列数据处理的神经网络模型,它通过循环结构和记忆能力可以更好地捕捉序列数据中的时序依赖关系,广泛应用于多个领域的任务。
2、数据集简介:
age: 1)年龄
sex:2)性别
cp: 3) 胸痛类型(4 values) aK同字
trestbps: 4) 静息血压
chol: 5) 血清胆甾醇(mg/dl
fbs: 6) 空腹血糖> 120 mg/dI
restecg: 7) 静息心电图结果(值0,1 ,2)
thalach: 8) 达到的最大心率
exang: 9) 运动诱发的心绞痛
oldpeak: 10) 相对于静止状态,运动弓|起的ST段压低
slope: 11) 运动峰值ST段的斜率
ca: 12) 荧光透视着色的主要血管数量(0-3)
thal: 13)0= 正常; 1 =固定缺陷; 2 =可逆转的缺陷
target: 14) 0 =心脏病发作的几率较小1 =心脏病发作的几率更大
3、代码简读
[303 rows x 14 columns]
age 0
sex 0
cp 0
trestbps 0
chol 0
fbs 0
restecg 0
thalach 0
exang 0
oldpeak 0
slope 0
ca 0
thal 0
target 0
3. X = df.iloc[:, :-1] 表示选择df去掉最后一列的所有行,意味着X包含了df中除了最后一列外所有列的数据。
y = df.iloc[:, -1] 表示选择df中最后一列的所有行的数据,就是标签数据。
4. 利用train_test_split()划分训练集与测试集。
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1, random_state=1)
5. 使用了 StandardScaler 进行特征标准化处理,将训练集和测试集的输入特征进行了转换。训练集和测试集的输入特征数据都经过了标准化处理,即按照均值为0,标准差为1的方式进行缩放。这有助于消除特征之间的量纲差异,使得模型能够更好地学习和预测。
sc = StandardScaler() X_train = sc.fit_transform(X_train) X_test = sc.transform(X_test)
X_train = sc.fit_transform(X_train):将训练集的输入特征 X_train 进行标准化处理。fit_transform() 方法首先对训练集数据 X_train 进行拟合(计算均值和标准差),然后对其进行标准化转换。
X_test = sc.transform(X_test):对测试集的输入特征 X_test 进行标准化处理。transform() 方法使用之前拟合得到的均值和标准差对测试集进行标准化转换,保持与训练集相同的标准化方式。
6. 进行形状重塑操作,将原先二维的输入特征重塑为三维张量,以满足后续深度学习模型的输入要求。
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)
X_train = X_train.reshape(X_train.shape[0], X_train.shape[1], 1):对训练集的输入特征 X_train 进行形状重塑。在这里,通过 reshape() 方法将 X_train 转换为一个三维张量,形状为 (样本数, 特征数, 1)。
X_train.shape[0]:表示训练集样本的数量。
X_train.shape[1]:表示特征数。
1:表示每个特征的维度。
model = Sequential() model.add(SimpleRNN(200, input_shape=(13, 1), return_sequences=True, activation='relu')) model.add(Dense(100, activation='relu')) model.add(Dense(1, activation='sigmoid')) model.summary() opt = tf.keras.optimizers.Adam(learning_rate=1e-4) model.compile(loss='binary_crossentropy', optimizer=opt, metrics="accuracy") epochs = 100 history = model.fit(X_train, y_train, epochs=epochs, batch_size=128, validation_data=(X_test, y_test), verbose=1) # 模型评估 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(epochs) plt.figure(figsize=(14, 4)) plt.subplot(1, 2, 1) plt.plot(epochs_range, loss, label='Training Accuracy') plt.plot(epochs_range, val_acc, label='Validation Accuracy') plt.legend(loc='lower right') plt.title('Training and Validation Accuracy')
构建了一个简单的循环神经网络模型,其中包含一个 Simple RNN 层作为输入层,两个 Dense 层作为隐藏层和输出层。模型的输入维度为 (13, 1),输出为一个二分类问题(sigmoid 激活函数)。最后使用 model.summary() 打印出模型的概要信息。