我有一个多标签数据集,我希望通过交叉验证测试来确定每个标签的F分数值。有没有在sklearn或skmultilearn中实现的示例代码?它的文档似乎只为整个数据集提供了价值。
发布于 2017-10-14 15:54:52
如果您有y和y_predict,可以使用scikit-learn的分类报告。
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]当然,您可以使用一个http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.KFold.html,并通过所有的折叠,并得到他们的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. ])https://stackoverflow.com/questions/46745787
复制相似问题