我想看看精度和召回率如何随阈值变化(而不仅仅是彼此变化)

model = RandomForestClassifier(500, n_jobs = -1);
model.fit(X_train, y_train);
probas = model.predict_proba(X_test)[:, 1]
precision, recall, thresholds = precision_recall_curve(y_test, probas)
print len(precision)
print len(thresholds)

返回值:
283
282

因此,我不能将它们组合在一起。关于为什么可能会出现这种情况的任何线索?

最佳答案

对于此问题,应忽略最后的精度和召回值
最后的精度和召回值分别始终为1.和0,并且没有相应的阈值。

例如,这是一个解决方案:

def plot_precision_recall_vs_threshold(precisions, recall, thresholds):
    fig = plt.figure(figsize= (8,5))
    plt.plot(thresholds, precisions[:-1], "b--", label="Precision")
    plt.plot(thresholds, recall[:-1], "g-", label="Recall")
    plt.legend()

plot_precision_recall_vs_threshold(precision, recall, thresholds)

这些值应该存在,以便在绘制精度与查全率时,绘图从y轴(x = 0)开始。

关于python - 在scikit的precision_recall_curve中,为什么阈值与召回率和Precision的维数不同?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31639016/

10-11 03:45