В настоящее время делаю мультибликовый классификатор.Я получаю подозрительно высокую точность (0,94), вызывая метод оценки в кератах (метод оценки возвращает точность и потери).Затем я попытался запрограммировать метод вручную, как описано здесь: Как Keras оценивает точность?
Однако я получаю гораздо более низкую точность, делая это самостоятельно.F1_mico: 0,7157894736842105 Точность: 0,3530864197530864
Я не понимаю, почему.Я думал, что это связано с несбалансированностью классов.Значение f1_mico высокое, в то время как f1_macro составляет около 0,45, поэтому, кажется, имеет смысл (у меня есть иерархия, поэтому некоторые классы, естественно, появляются чаще, чем другие).Однако как Керас получает такую высокую точность, это не имеет смысла для меня.Код:
model.compile(optimizer=adam, loss='binary_crossentropy', metrics=['accuracy'])
#print("Traning Model...")
model.fit(X_train, y_train, batch_size=batch_size, epochs=epochs, verbose=1, callbacks=[checkpoint], validation_data=(X_test, y_test)) # starts training
print("Testing Model")
output = model.predict(X_final, batch_size = batch_size)
for pred_i in output:
pred_i[pred_i >=0.5] = 1
pred_i[pred_i < 0.5] = 0
print "F1: " + str(f1_score(y_final, output, average='micro'))
print "Accuracy: " + str(accuracy_score(y_final, output))
mscores = model.evaluate(X_final, y_final, batch_size = batch_size)
print mscores
Выход:
Creating Model...
Testing Model
F1: 0.7157894736842105
Accuracy: 0.3530864197530864
405/405 [==============================] - 8s 20ms/step
['0.15227678694106914', '0.9422222640779283']