为多标签分类评估 DNNClassifier

Posted

技术标签:

【中文标题】为多标签分类评估 DNNClassifier【英文标题】:Evaluating DNNClassifier for multi-label classification 【发布时间】:2019-10-13 18:28:13 【问题描述】:

我正在使用 tensorflow DNNClassifier 进行多标签分类,它使用准确度,因为它使用它的度量。我正在使用 sklearn f1 指标评估模型,该指标的分数很低。 sklearn准确度的分数也很低。我的实现是否有问题?

DNN 分类器

embedding_feats = hub.text_embedding_column(key='text',
                         module_spec='https://tfhub.dev/google/universal-sentence-encoder/2',
                         trainable=False)

dnn = tf.estimator.DNNClassifier(
          hidden_units=[512, 128],
          feature_columns=[embedding_feats],
          n_classes=11,
          activation_fn=tf.nn.relu,
          dropout=0.1,
          optimizer=tf.train.AdagradOptimizer(learning_rate=0.005))

DNN 分类器训练输出。 Val acc 为 0.40

Training for step = 8000
Train Time (s): 52.573952436447144
Eval Metrics (Train): 'accuracy': 0.44695774, 'average_loss': 1.516403, 'loss': 193.58235, 'global_step': 8200
Eval Metrics (Validation): 'accuracy': 0.40303582, 'average_loss': 1.6520736, 'loss': 209.30502, 'global_step': 8200

Sklearn F1 成绩

f1_score(y_test,predictions_test,labels=le.classes_,average='weighted')
0.1066998393248964

Sklearn 准确度得分

accuracy_score(y_test, predictions_test)
0.11804138735062664

【问题讨论】:

输出层的激活函数是什么?您的预测数据看起来如何? 【参考方案1】:

造成这种情况的一个可能原因是您没有将预测转换为整数,即 0 或 1。您的神经网络正在根据记录属于 1 类的概率生成输出。如果您直接采用此概率并使用您的y_test 对其进行评估,它们将不匹配,因为 0.98 不等于 1。

predictions_test 舍入到最接近的整数,即0.5 为1,并检查准确性。

【讨论】:

以上是关于为多标签分类评估 DNNClassifier的主要内容,如果未能解决你的问题,请参考以下文章

为多标签文本分类转换数据集

将二进制分类转换为多标签?

转换为多标签分类

为多类多标签分类构建混淆矩阵

为多标签分类生成 sklearn 指标的问题

多标签分类的预训练