我正在学习性能指标。我有一个数据帧,有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()
创建矩阵的其他方法吗?关于如何在不添加额外行的情况下执行此操作,有什么建议吗
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
相关问题 更多 >
编程相关推荐