回答

3

可以使用scikit学习的分类报告,假设你有y和y_predict

from sklearn.metrics import classification_report 
y = [0, 1, 2, 2, 2] 
y_pred = [1, 0, 2, 2, 1] 
classes = {'Banana':0,'Apple':1,'Orange':2} 
print(classification_report(y, y_pred,target_names=classes.keys())) 

输出

   precision recall f1-score support 

    Banana  0.00  0.00  0.00   1 
     Apple  0.00  0.00  0.00   1 
    Orange  1.00  0.67  0.80   3 

avg/total  0.60  0.40  0.48   5 

或者您可以使用

print(f1_score(y, y_pred,average=None)) 

,你会得到列表中的标签分数

[ 0. 0. 0.8] 

当然你也可以使用一个KFolds iterator并办理所有的褶皱,并得到他们的F1为每个标签,但我不明白你为什么会想这样做。

在您使用交叉验证的情况下,您可以得到每倍f1的分数,这是因为评分用于评估模型并选择最佳。见下文

from sklearn import svm, datasets 
from sklearn.model_selection import cross_val_score 
iris = datasets.load_iris() 
X, y = iris.data, iris.target 
clf = svm.SVC() 
cross_val_score(model, X, y, cv=10, scoring='f1_weighted') 

将输出的示例的10分,每1倍

array([ 1.  , 0.93265993, 1.  , 1.  , 1.  , 
     0.93265993, 0.93265993, 1.  , 1.  , 1.  ]) 
+0

感谢您的回答的阵列。但是我真正要求的是关于多标签数据(每个标签具有二进制类数据的多个输出(标签))而不是多类数据。因此,确定交叉验证分数的输入应该是多标签数据集的X,y(标签输出集合)。使用score = cross_val_score(model,X,y,cv = 10,scoring ='f1_weighted')会返回整个数据集的分数。有没有办法获得每个单独标签的评分? – user3464608

+0

我可以看到的唯一方法是在y中的每列上使用交叉验证,即在每组标签上。对于我在范围内(y.shape [1])])''这将产生n_label([cross_val_score(model,X,y [:,i],cv = 10,scoring ='f1' x 10形阵列 – sgDysregulation