0

我一直在尝试摆弄 sklearn 指标,尤其是 average_precision_score。但是,我只能在 sklearn 文档中找到一个计算 average_precision_score 的示例,并且也可以使用 SVM。下面是代码片段以及作为参考的文档链接:

文档 - Precision Recall Sklearn 和代码参考

# Create a simple classifier
classifier = svm.LinearSVC(random_state=random_state)
classifier.fit(X_train, y_train)
y_score = classifier.decision_function(X_test)
# Computing the avaerage_precision_score
from sklearn.metrics import average_precision_score
average_precision = average_precision_score(y_test, y_score)

现在我的问题是在上面的例子中,y_score是来自 decision_function 的输出(它预测样本的置信度分数),而y_test是类。考虑到 RandomForests 没有与 SVM 一样的 decision_function 方法,如何计算y_score

我已经尝试并看到人们使用 predict(self, X)(Predict class for X) 和 predict_proba(self, X)(Predict class probabilities for X) 方法来计算 average_precision_score。使用这两种方法,我的结果非常不同。使用 predict(self, X) 我得到0.74作为 average_precision_score 并使用 predict_proba 我得到0.94。我的 y_test 是具有值 (1, 0) 的类标签。我有点困惑什么是正确的。何时使用 predict 与 predict_proba,以及为什么它们会产生如此不同的平均精度分数。任何帮助将不胜感激。

4

1 回答 1

0

使用 predict - 你预测标签(假设它是 0 和 1) 使用 predict_proba - 对于某个样本,你有两个标签的概率(结果 [0.1, 0.9] => 这个样本很可能是 1 而不是 0)。

度量 AP - 是顺序度量,因此唯一的预测顺序很重要。因此,如果地面实况向量 [1, 0, 1] 和预测向量(通过概率)[0.9, 0.7, 0.8] - AP 为您提供第二个示例的 1.0 偶数概率,因为 1 是 0.7。

因此,如果您的模型犯了一个错误(错过了课程),订单仍然有可能更加顺利。因此,对于像 AP 或 ROC AUC 这样的订单指标,最好将 proba 置于 predict 之上。

于 2020-10-25T17:47:04.817 回答