当所有预测值为 1 时,如何使用 pandas.crosstab 创建混淆矩阵?

How to create a confusion matrix with pandas.crosstab when all the predicted values are 1?

我正在学习性能指标。我有一个包含 0-10099 行和两列(Y_Actual、Y_Predicted)的数据框。我想用 pandas.

创建一个混淆矩阵

我的第一次尝试:

y_actual= df5a["y"]
y_actual= y_actual.rename("Actual")
y_predicted=df5a["labels"]
y_predicted= y_predicted.rename("Predicted")
confusion_matrix_5a= pd.crosstab(y_actual, y_predicted)
confusion_matrix_5a

输出1:

Predicted   1
Actual  
0.0        100
1.0        10000

检查了我所有的 Y_Predicted 后,我发现所有的值都是“1”。为了让 pandas.crosstab() 在这种情况下创建矩阵,我在数据框中添加了一个额外的行(Y_actual=0,Y_predicted= 1)。

输出2:

Predicted   0   1
Actual      
0.0         1   100
1.0         0   10000

真正的混淆矩阵应该是:

Predicted   0   1
Actual      
0.0         0   100
1.0         0   10000

output2 中的“1”是因为我添加了额外的行。我知道这不会影响我的准确性,因为我有很多行,所以添加行的影响可以忽略不计。 当您在其中一列中具有唯一值时,您是否知道使用 pandas.crosstab() 创建矩阵的任何其他方法?关于如何在不添加额外行的情况下执行此操作的任何建议?

crosstab 选取列中存在的值,因此您需要手动填充缺失的列。一个简单的方法是 reindex.

假设 conf_mat 是只有一列的混淆矩阵。

然后您可以conf_mat.reindex([0,1], axis = 'columns', fill_value = 0)强制数据框保存名称为 0 和 1 的列。

参考:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.reindex.html