【问题标题】:Parameters for sklearn average precision score when using Random Forest使用随机森林时sklearn平均精度分数的参数
【发布时间】:2020-05-27 09:32:43
【问题描述】:

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

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 是类。考虑到 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,为什么它们会导致如此不同的平均精度分数。任何帮助将不胜感激。

【问题讨论】:

    标签: python machine-learning scikit-learn random-forest average-precision


    【解决方案1】:

    使用 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 之上。

    【讨论】:

      猜你喜欢
      • 2019-03-14
      • 2022-01-18
      • 2016-07-23
      • 2018-12-12
      • 2015-11-04
      • 2018-06-11
      • 2021-07-10
      • 2020-08-19
      • 1970-01-01
      相关资源
      最近更新 更多