使用随机森林时 sklearn 平均精度分数的参数

Parameters for sklearn average precision score when using Random Forest

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

Documentation - Precision Recall Sklearn and code reference

# 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 是 class。考虑到在 SVM 的情况下,RandomForests 没有 decision_function 方法,如何计算 y_score

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

使用预测 - 你预测标签(假设它是 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.

因此,如果您的模型出现错误(遗漏了 class),订单仍然有机会更加顺畅。因此,对于像 AP 或 ROC AUC 这样的顺序指标,最好将 proba 置于预测之上。