来自scikits cross_val_score的所有课程的f1分数

时间:2016-05-24 12:15:52

标签: python scikit-learn cross-validation

我正在使用scikit-learn(package cross_val_score)中的sklearn.cross_validation来评估我的分类器。
如果我使用f1作为scoring参数,该函数将返回on class的f1-score。为了获得平均值,我可以使用f1_weighted,但我无法找到如何获得其他类的f1分数。 (精确和回忆类似)

sklearn.metrics中的函数有一个labels参数来执行此操作,但我在文档中找不到这样的内容。

有没有办法一次性获得所有课程的f1分数,或者至少指定应该考虑cross_val_score的课程?

3 个答案:

答案 0 :(得分:2)

当你创建一个具有make_scorer功能的得分手时,你可以传递你需要的任何其他参数,如下所示:

cross_val_score(
    svm.SVC(kernel='rbf', gamma=0.7, C = 1.0),
    X, y,
    scoring=make_scorer(f1_score, average='weighted', labels=[2]),
    cv=10)

cross_val_score只允许您返回一个分数。没有额外的技巧,你不能一次性获得所有课程的分数。如果您需要,请参阅另一个堆栈溢出问题,其中包含:Evaluate multiple scores on sklearn cross_val_score

答案 1 :(得分:0)

对于每个班级的个人分数,请使用此:

f1 = f1得分(y_test,y_pred,平均值=无) print(“ f1 list intent:”,f1)

答案 2 :(得分:-3)

要计算F1得分,我们可以使用sklearn.metrics.f1_score

http://scikit-learn.org/stable/modules/generated/sklearn.metrics.f1_score.html

示例代码

from sklearn import svm
from sklearn import metrics
from sklearn.cross_validation import train_test_split
from sklearn.datasets import load_iris
from sklearn.metrics import f1_score, accuracy_score

# prepare dataset
iris = load_iris()
X = iris.data[:, :2]
y = iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

# svm classification
clf = svm.SVC(kernel='rbf', gamma=0.7, C = 1.0).fit(X_train, y_train)
y_predicted = clf.predict(X_test)

# performance
print "Classification report for %s" % clf
print metrics.classification_report(y_test, y_predicted)

print("F1 micro: %1.4f\n" % f1_score(y_test, y_predicted, average='micro'))
print("F1 macro: %1.4f\n" % f1_score(y_test, y_predicted, average='macro'))
print("F1 weighted: %1.4f\n" % f1_score(y_test, y_predicted, average='weighted'))
print("Accuracy: %1.4f" % (accuracy_score(y_test, y_predicted)))

示例输出

Classification report for SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
  decision_function_shape=None, degree=3, gamma=0.7, kernel='rbf',
  max_iter=-1, probability=False, random_state=None, shrinking=True,
  tol=0.001, verbose=False)
             precision    recall  f1-score   support

          0       1.00      0.90      0.95        10
          1       0.50      0.88      0.64         8
          2       0.86      0.50      0.63        12

avg / total       0.81      0.73      0.74        30

F1 micro: 0.7333

F1 macro: 0.7384

F1 weighted: 0.7381

Accuracy: 0.7333