评估DNNClassifier以进行多标签分类

时间:2019-05-28 09:06:16

标签: tensorflow machine-learning scikit-learn classification multilabel-classification

我正在使用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 :(得分:0)

一个可能的原因可能是您没有将预测转换为整数,即0或1。您的神经网络正在根据记录为1类的概率生成输出。并用您的y_test进行评估,因为0.98不等于1,所以它们不匹配。

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