python - 与 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) + "%")
解决方案
推荐阅读
- entity-framework - Entity Framework Core DbContext inheritance problem with DbOptions in constructor
- javascript - Get value from Request URL response data
- r - 仅当点位于相同的纬度和经度时,才在 R 的传单中创建集群?
- c - 在 CMake 和 Qt Creator 中使文件在运行时可用
- python - 'python3.5':没有这样的文件或目录
- c++ - How can I use the vector datatype in a header-file in C++?
- css - Resolution is less than in media queries, but still does not work
- sql - Most efficient query to extract hashtags timeline grouped by date in BigQuery
- c++ - Solaris 12.3 C++ 编译器内存不足
- javascript - 光滑的滑块工作正常,但在控制台中出现不必要的错误 [我想解决它]