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

时间:2020-02-11 21:54:45

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

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

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 以上的情况下,决断函数(预测样本的置信度得分)和 y_test 的输出是类。考虑到没有与SVM一样的RandomForests决策函数方法,如何计算 y_score

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

1 个答案:

答案 0 :(得分:0)

使用预测-您预测标签(假设它是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置于预测之上。