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

2024-05-29 02:22:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习性能指标。我有一个数据帧,有0-10099行和两列(Y_实际,Y_预测)。我想创建一个熊猫混淆矩阵

我的第一次尝试:

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_预测值后,我意识到所有值都是“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

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


Tags: 数据pandaslabels情况矩阵matrixrenameactual
1条回答
网友
1楼 · 发布于 2024-05-29 02:22:30

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

相关问题 更多 >

    热门问题