【发布时间】:2021-06-12 13:48:43
【问题描述】:
我正在使用kerasSequential() API 为 5 类问题构建我的 CNN 模型。由于准确度不是多类问题的好指标,我必须评估其他指标来评估我的模型。目前,我使用sklearn的confusion_matrix和classification_report,但我想研究更多指标,所以我决定评估ROC AUC,但我不确定这是如何使用keras完成的,有哪些修改我应该对我的代码等做些什么。
目前,这是我构建模型的方式:
model = Sequential()
activ = 'relu'
model.add(Conv2D(32, (1, 3), strides=(1, 1), padding='same', activation=activ, input_shape=(1, 100, 4)))
model.add(Conv2D(32, (1, 3), strides=(1, 1), padding='same', activation=activ ))
model.add(MaxPooling2D(pool_size=(1, 2) ))
model.add(Conv2D(64, (1, 3), strides=(1, 1), padding='same', activation=activ))
model.add(Conv2D(64, (1, 3), strides=(1, 1), padding='same', activation=activ))
model.add(MaxPooling2D(pool_size=(1, 2)))
model.add(Flatten())
A = model.output_shape
model.add(Dense(int(A[1] * 1/4.), activation=activ))
model.add(Dense(5, activation='softmax'))
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(x_train, y_train, epochs=5, batch_size=64, shuffle=True, callbacks=callbacks,
validation_split=0.2)
测试评估:
Pred = model.predict(x_test, batch_size=32)
Pred_Label = np.argmax(Pred, axis=1)
test_acc = accuracy_score(y_test, Pred_Label)
ConfusionM = confusion_matrix(list(y_test), Pred_Label, labels=[0, 1, 2, 3, 4])
class_report = classification_report(list(y_test), Pred_Label, labels=[0, 1, 2, 3, 4])
要得到结果,如下所示:
Confusion Matrix:
[[ 2514 1040 2584 6690 1773]
[ 208 359 37 668 126]
[ 1445 1156 1172 3438 1106]
[ 3158 2014 2993 10185 1951]
[ 154 77 29 493 151]]
Classification Report:
precision recall f1-score support
Class:0 0.34 0.17 0.23 14601
Class:1 0.08 0.26 0.12 1398
Class:2 0.17 0.14 0.15 8317
Class:3 0.47 0.50 0.49 20301
Class:4 0.03 0.17 0.05 904
accuracy 0.32 45521
macro avg 0.22 0.25 0.21 45521
weighted avg 0.35 0.32 0.32 45521
如何将 ROC AUC 添加到我的模型指标中?
【问题讨论】:
-
你试过
keras.metrics.AUC(name='auc')吗? -
不是真的,我是否必须对上面的模型创建代码进行一些更改?
标签: python tensorflow keras roc auc