Оценка DNNClassifier для классификации нескольких меток - PullRequest
0 голосов
/ 28 мая 2019

Я использую Tenorflow DNNClassifier для классификации по нескольким меткам, которая использует точность, так как использует свою метрику.Я оцениваю модель, используя показатель sklearn f1, который показывает довольно низкий балл.Также оценка от склеарна точность низкая.Моя реализация где-то неверна?

Классификатор 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.Значение по умолчанию составляет 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 голосов
/ 29 мая 2019

Одной из возможных причин этого может быть то, что вы не конвертируете свои прогнозы в целое число, то есть 0 или 1. Ваша нейронная сеть генерирует выходные данные с точки зрения вероятности того, что запись относится к классу 1. Если вы принимаете эту вероятность напрямую и оцените его с вашими y_test, они не будут совпадать, потому что 0,98 не равно 1.

Округление predictions_test до ближайшего целого числа, то есть <0,5 будет 0 и> 0,5 будет 1 и проверьте точность.

...