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_)
我正在做一些文本 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_)