Python 在多类别分类中,如何根据不同类别标记TP、TN、FP、FN的计数?
我已经编写了一个代码,它使用scikit学习计算多类分类器的TP、TN、FP、FN计数。我面临的问题是,我希望在每个类中都表示此计数,如下所示:Python 在多类别分类中,如何根据不同类别标记TP、TN、FP、FN的计数?,python,pandas,machine-learning,scikit-learn,multiclass-classification,Python,Pandas,Machine Learning,Scikit Learn,Multiclass Classification,我已经编写了一个代码,它使用scikit学习计算多类分类器的TP、TN、FP、FN计数。我面临的问题是,我希望在每个类中都表示此计数,如下所示: Actual Predicted iphone iphone samsung sony Sony sony bmw audi 我想要所有tn、tp、fn、fp类的计数,例如: tp tn tn tp bmw 25 15 40 50 samsung
Actual Predicted
iphone iphone
samsung sony
Sony sony
bmw audi
我想要所有tn、tp、fn、fp类的计数,例如:
tp tn tn tp
bmw 25 15 40 50
samsung 20 28 35 55
这就是我的代码的外观:
import pandas as pd
import numpy as np
from sklearn.metrics import multilabel_confusion_matrix
from sklearn.metrics import accuracy_score
from sklearn.metrics import classification_report
#reading the input file
df = pd.read_excel('C:\\test.xlsx')
#Converting the columns to array
actual = df['Actual'].to_numpy()
predicted = df['Predicted'].to_numpy()
mcm = multilabel_confusion_matrix(actual, predicted)
#print(mcm)
tn = mcm[:, 0, 0]
tp = mcm[:, 1, 1]
fn = mcm[:, 1, 0]
fp = mcm[:, 0, 1]
print(tn,tp,fn,fp)
输出看起来是这样的,它只是19个类的tn,tp,fn,fp计数
array([182, 569, 568, 569, 545, 429, 566, 516, 504, 568, 534, 437, 567,
569, 569, 569, 569, 567, 569], dtype=int64), array([111, 0, 0, 0, 7, 21, 0, 7, 37, 0, 15, 78, 0,
0, 0, 0, 0, 0, 0], dtype=int64), array([ 48, 0, 0, 0, 16, 117, 0, 47, 17, 0, 13, 36, 0,
0, 0, 0, 0, 0, 0], dtype=int64), array([229, 1, 2, 1, 2, 3, 4, 0, 12, 2, 8, 19, 3,
1, 1, 1, 1, 3, 1], dtype=int64))
如何实现每个18的标记,并根据单个类别进行计数?可能是?从混淆矩阵中,我获取了每个类别的tp、tn、fp、fn值,但问题是我想将每个计数映射到它们各自的类别中,而我无法做到这一点,并且从混淆矩阵中,我没有发生。参见
labels=df['Actual'].unique();mcm=multlabel\u composition\u matrix(实际,预测,labels=labels)
,然后按labels
中的顺序标记行。我可以在这里获得唯一的类,这些类具有非零值…以便获得整个内容(即类及其各自的tp、tn、fp、fn)在一个数据帧中,我必须将不同列中的所有内容插入到一个新的数据帧中?使用pd.dataframe({'tn':mcm[:,0,0],…},index=labels)
i能够获得结果。这是否正确?