0
我有一个多标签数据集,我想通过交叉验证测试确定每个单独标签的F分数值。是否有任何示例代码在sklearn或skmultilearn中实现?它的文档似乎只为整个数据集提供了价值。通过多标签分类中的交叉验证评估单个标签的F分数
我有一个多标签数据集,我想通过交叉验证测试确定每个单独标签的F分数值。是否有任何示例代码在sklearn或skmultilearn中实现?它的文档似乎只为整个数据集提供了价值。通过多标签分类中的交叉验证评估单个标签的F分数
可以使用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. ])
感谢您的回答的阵列。但是我真正要求的是关于多标签数据(每个标签具有二进制类数据的多个输出(标签))而不是多类数据。因此,确定交叉验证分数的输入应该是多标签数据集的X,y(标签输出集合)。使用score = cross_val_score(model,X,y,cv = 10,scoring ='f1_weighted')会返回整个数据集的分数。有没有办法获得每个单独标签的评分? – user3464608
我可以看到的唯一方法是在y中的每列上使用交叉验证,即在每组标签上。对于我在范围内(y.shape [1])])''这将产生n_label([cross_val_score(model,X,y [:,i],cv = 10,scoring ='f1' x 10形阵列 – sgDysregulation