评估多标签分类模型

时间:2020-07-16 20:21:07

标签: python tensorflow keras neural-network multilabel-classification

我目前有一个多标签分类问题,为此我正在使用keras构建神经网络,如下所示:

n_cols = dataset.shape[1]
print(n_cols)

model = Sequential()
model.add(Dense(128, activation='relu', input_shape=(n_cols,)))
model.add(Dense(64, activation='relu'))
model.add(Dense(26, activation='sigmoid')) # Sigmoid for multi-label classification

sgd = SGD(lr=0.1, decay=1e-6, momentum=0.5, nesterov=True)
#RMSprop
model.compile(loss='binary_crossentropy', optimizer='RMSprop', metrics=['accuracy'])

model.summary()

## Fit the model ##
early_stopping_monitor = EarlyStopping(patience=20)
history = model.fit(dataset, labels, validation_split=0.33, epochs=30, callbacks=[early_stopping_monitor])

plt.plot(history.history['accuracy'])
plt.plot(history.history['val_accuracy'])
plt.title('Model accuracy')
plt.ylabel('Accuracy')
plt.xlabel('Epoch')
plt.legend(['Train', 'Test'], loc='upper left')
plt.show()

我被告知,对于多标签分类,我们使用binary_crossentropy进行损失,而在最后一层(输出层)使用sigmoid进行激活。但是,通过此操作,我得到的accuracyval_accuracy分别为~0.0931~0.0937

对于多标签分类,使用精度度量标准是否最合适?我环顾四周,有些人建议使用其他指标,例如binary_accuracy可能会更好。

问题是,如何最好地评估多标签分类?

编辑:供参考,我的目标“类”中有26个标签列,数据集由21列组成。训练模型的整个数据集约有82k个样本。

1 个答案:

答案 0 :(得分:0)

this中所述,使用binary_crossentropy是正确的。将softmax层添加为最后一层是对模型的第一个更改,如该线程下面的答案所述。此外,关于您的实际问题:如链接文章中所述,您可能希望改为进行精确/调用。