首页 > 解决方案 > 与 sklearn.metrics.confusion_matrix 相比,为什么 tf.keras.models.Sequential 在评估()之后给出不同的准确度?

问题描述

我正在使用具有以下设置的 tf.keras 训练二进制分类器:

Tensorflow 2.0 - 运行 Python 3.6 的 GPU、Jupyter Notebook

当我训练我的模型时,我收到的训练数据准确率约为 83%。然后我用我的测试数据评估模型,也得到了大约 83% 的准确率。但是,如果我用 sklearn 创建一个分类矩阵并以这种方式计算准确度,我会得到大约 68% 的准确度。

tf.keras 计算准确率是否与预期方法不同:(正确分类/总分类)* 100% ???

这是我的相关代码和相应的输出:

train_df = df_to_dataset(X_train, y_train, shuffle=True, batch_size=10)
test_df = df_to_dataset(X_test, y_test, shuffle=True, batch_size=10)

lfc = len(feat_cols)

model = tf.keras.models.Sequential([
  tf.keras.layers.DenseFeatures(feat_cols),
  tf.keras.layers.Dense(lfc, input_dim=lfc, activation='relu'),
  tf.keras.layers.Dense(2*lfc, activation='relu'),
  tf.keras.layers.Dense(2*lfc, activation='relu'),
  tf.keras.layers.Dense(lfc, activation='relu'),
  tf.keras.layers.Dense(1, activation='sigmoid'),
])

model.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['accuracy'])

history = model.fit(train_df, epochs=15)

score = model.evaluate(test_df)

preds = model.predict(test_df)
y_pred = [1 if y > 0.5 else 0 for y in preds]
matrix = confusion_matrix(y_test, y_pred)
print(matrix)
accuracy = (matrix[0][0] + matrix[1][1]) / (matrix[0][0] + matrix[0][1] + matrix[1][0] + matrix[1][1])
print("Accuracy: " + str(accuracy * 100) + "%")

tf.keras 输出

sklearn.classification_matrix 输出

标签: pythontensorflowkerasmetrics

解决方案


推荐阅读