请修复以下代码因为testAcsv中只有两列数据以下代码会在运行test_labels = nparraytest_datalabel-1时报错全部的代码为:import numpy as npimport pandas as pdfrom sklearnmodel_selection import train_test_splitfrom sklearnpreprocessing import
以下是修复后的代码:
import numpy as np import pandas as pd from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler
读取数据
train_data = pd.read_csv('train.csv') test_data = pd.read_csv('test.csv')
将标签设为一维数组
train_labels = np.array(train_data['label']) test_labels = np.array(test_data['label'])
将数据缩放到标准正态分布
scaler = StandardScaler().fit(train_data.iloc[:, :-1].values) train_data.iloc[:, :-1] = scaler.transform(train_data.iloc[:, :-1].values) test_data.iloc[:, :-1] = scaler.transform(test_data.iloc[:, :-1].values)
将数据转换为张量(Tensor)形式
train_data = np.reshape(train_data.values, (train_data.shape[0], 1, train_data.shape[1])) test_data = np.reshape(test_data.values, (test_data.shape[0], 1, test_data.shape[1]))
分割训练集和验证集
train_x, val_x, train_y, val_y = train_test_split(train_data, train_labels, test_size=0.2, random_state=42)
模型构建和训练
from keras.models import Sequential from keras.layers import LSTM, Dense, Dropout
构建模型
model = Sequential() model.add(LSTM(128, input_shape=(1, 187), return_sequences=True)) model.add(Dropout(0.5)) model.add(LSTM(64)) model.add(Dropout(0.5)) model.add(Dense(1, activation='sigmoid'))
编译模型
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
训练模型
history = model.fit(train_x, train_y, epochs=50, batch_size=128, validation_data=(val_x, val_y))
模型预测和ROC曲线绘制
from sklearn.metrics import roc_curve, auc
对测试集进行预测
prediction = model.predict(test_data)
计算ROC曲线和AUC
fpr, tpr, thresholds = roc_curve(test_labels, prediction) roc_auc = auc(fpr, tpr)
绘制ROC曲线
import matplotlib.pyplot as plt plt.title('Receiver Operating Characteristic') plt.plot(fpr, tpr, 'b', label='AUC = %0.2f'% roc_auc) plt.legend(loc='lower right') plt.plot([0,1],[0,1],'r--') plt.xlim([-0.1,1.0]) plt.ylim([-0.1,1.01]) plt.ylabel('True Positive Rate') plt.xlabel('False Positive Rate') plt.show()
评估模型精度
prediction[prediction>=0.5] = 1 prediction[prediction<0.5] = 0 accuracy = np.mean(prediction == test_labels) print('Accuracy: {:.2f}%'.format(accuracy*100))
原文地址: https://www.cveoy.top/t/topic/baXj 著作权归作者所有。请勿转载和采集!