目前正在做一个多标签分类器。 我收到了令人怀疑的高精度(0.94),在keras中调用evaluate方法(evaluate方法返回准确性和丢失)。然后我尝试手动编程方法,如下所述: How does Keras evaluate the accuracy?
但是,我自己做得比较准确。 F1_mico:0.7157894736842105 精度:0.3530864197530864
我不明白为什么。我认为它必须对不平衡的类做一些事情。 f1_mico值很高,而f1_macro大约是0.45,所以它似乎有意义(我有一个层次结构,所以有些类自然比其他类看起来更频繁)。然而,keras如何获得如此高的准确度,对我来说没有意义。代码:
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']
答案 0 :(得分:1)
keras计算的精度比较了单热编码矢量的每个值,并查看它是否匹配。如果数据相当稀疏,则会导致系统具有高精度,因为大多数值将被分配为零。如果完整预测匹配,则scilearn精度仅返回数据的一个。