Scikit-learn:precision_recall_fscore_support returns 奇怪的结果

Scikit-learn: precision_recall_fscore_support returns strange results

我正在做一些文本 minining/classification 并尝试使用 sklearn.metrics 模块中的 precision_recall_fscore_support 函数评估性能。我不确定如何创建一个非常小的示例来重现该问题,但也许有人可以提供帮助,因为这很明显是我所缺少的。

上述功能 returns 以及对每个 class 的支持。文档说明

support: int (if average is not None) or array of int, shape = [n_unique_labels] : The number of occurrences of each label in y_true.

但在我的例子中,返回支持的 classes 的数量与测试数据中不同 classes 的数量不同。

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5)

classifier = svm.SVC(kernel="linear")
classifier.fit(X_train, y_train)

y_pred = classifier.predict(X_test)
prec, rec, fbeta, supp = precision_recall_fscore_support(y_test, y_pred)

print(len(classifier.classes_)) # prints 18
print(len(supp))                # prints 19
print(len(np.unique(y_test)))   # prints 18

怎么会这样?数据中没有的 class 怎么会有支持?

我不确定问题出在哪里,但在我的例子中,分类器学习到的 类 与测试数据中出现的 类 似乎不匹配。可以通过显式命名来强制函数计算正确 类 的性能度量。

prec, rec, fbeta, supp = precision_recall_fscore_support(y_test, y_pred, labels=classifier.classes_)