我有两个列表,其中包含基本事实和预测图像。两个列表都包含二进制图像。我需要获取这两个列表之间的准确性,f1-分数,召回率和准确性报告。
sklearn.metrics.classification_report可用于获取预测值和真值之间的分类报告,但仅接受一维数组。
http://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html
如何修改它以获得包含二进制图像的两个图像列表之间的分类报告?还是有更好的方法来执行此操作?我的代码:
import os
import cv2
import numpy as np
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
from sklearn.metrics import classification_report
path_pred = "absolute_path/pred"
pred_list = next(os.walk(path_pred))[2]
true_list_new=[]
pred_list_new=[]
for img in pred_list:
pred_img=cv2.imread("absolute_path/pred/%s" % img)
true_img=cv2.imread("absolute_path/true/%s" % img)
true_list_new.append(true_img)
pred_list_new.append(pred_img)
print("Confusion Matrix: ",
confusion_matrix(true_list_new, pred_list_new))
print ("Accuracy : ",
accuracy_score(true_list_new,pred_list_new)*100)
print("Report : ",
classification_report(true_list_new, pred_list_new))
p.s解决方案
import os
import cv2
import numpy as np
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
from sklearn.metrics import classification_report
path_pred = "absolute_path/pred"
pred_list = next(os.walk(path_pred))[2]
true_list_new=[]
pred_list_new=[]
for img in pred_list:
pred_img=cv2.imread("absolute_path/pred/%s" % img)
true_img=cv2.imread("absolute_path/true/%s" % img)
true_list_new.append(true_img)
pred_list_new.append(pred_img)
true_list_new=np.array(true_list_new)
pred_list_new=np.array(pred_list_new)
true_list_new=true_list_new.flattern()
pred_list_new=pred_list_new.flattern()
print("Confusion Matrix: ",
confusion_matrix(true_list_new, pred_list_new))
print ("Accuracy : ",
accuracy_score(true_list_new,pred_list_new)*100)
print("Report : ",
classification_report(true_list_new, pred_list_new))
答案 0 :(得分:2)
最简单的解决方案是读取图像,然后将其重塑为单个行向量。 如果您不必显示它们,则可以执行 image.reshape(-1):使用此行,将cv2加载为具有多列的numpy数组的图像转换为具有以下内容的numpy数组:单一维度。
以图形方式:
[[1, 2, 3],
[4, 5, 6], ==> [1, 2, 3, 4, 5, 6, 7, 8, 9]
[7, 8, 9]]