这个错误提示表明在某些地方引用了数组的第二个维度,但是该数组只有一个维度。具体分析代码,发现在特征工程中的create_dataset函数中,dataY数组的第二个维度被指定为1,但是在实际数据处理过程中,dataY数组只有一个维度,因此会出现上述错误。解决方法是将create_dataset函数中dataY数组的第二个维度指定为0。修改后的代码如下:

import pandas as pd import numpy as np from sklearn.model_selection import train_test_split from keras.models import Sequential from keras.layers import LSTM, Dense from sklearn.metrics import roc_curve, auc import matplotlib.pyplot as plt

读取数据

train_data = pd.read_csv('train.csv') test_data = pd.read_csv('testA.csv')

数据预处理

train_data['heartbeat_signals'] = train_data['heartbeat_signals'].replace(0, np.nan) train_data = train_data.dropna() train_data = train_data.reset_index(drop=True) test_data['heartbeat_signals'] = test_data['heartbeat_signals'].replace(0, np.nan)

划分训练集和验证集

train_set, val_set = train_test_split(train_data, test_size=0.2, random_state=42)

特征工程

def create_dataset(dataset, look_back=10): dataX, dataY = [], [] for i in range(len(dataset)-look_back-1): a = dataset[i:(i+look_back), 0] dataX.append(a) dataY.append(dataset[i + look_back, 0]) return np.array(dataX), np.array(dataY)

train_seq = np.array(train_set['heartbeat_signals']).reshape(-1, 1) val_seq = np.array(val_set['heartbeat_signals']).reshape(-1, 1) test_seq = np.array(test_data['heartbeat_signals']).reshape(-1, 1)

look_back = 10 trainX, trainY = create_dataset(train_seq, look_back) valX, valY = create_dataset(val_seq, look_back) testX, testY = create_dataset(test_seq, look_back)

模型搭建

model = Sequential() model.add(LSTM(64, input_shape=(look_back, 1))) model.add(Dense(1, activation='sigmoid')) model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

模型训练

history = model.fit(trainX, trainY, validation_data=(valX, valY), epochs=50, batch_size=64)

模型评估

test_predict = model.predict(testX) fpr, tpr, thresholds = roc_curve(testY, test_predict) roc_auc = auc(fpr, tpr)

绘制ROC曲线

plt.figure() plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area = %0.2f)' % roc_auc) plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--') plt.xlim([0.0, 1.0]) plt.ylim([0.0, 1.05]) plt.xlabel('False Positive Rate') plt.ylabel('True Positive Rate') plt.title('Receiver operating characteristic') plt.legend(loc="lower right") plt.show()

import pandas as pdimport numpy as npfrom sklearnmodel_selection import train_test_splitfrom kerasmodels import Sequentialfrom keraslayers import LSTM Densefrom sklearnmetrics import roc_curve aucimpo

原文地址: http://www.cveoy.top/t/topic/bd8Y 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录