当所有预测值为 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
我正在学习性能指标。我有一个包含 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