首页 > 解决方案 > 估计器结果已知时的精确召回曲线

问题描述

我有一个在 上运行的估计器的结果X,以及基本事实,我想使用plot_precision_recall_curve,但这需要传入estimatorX- 我不能这样做,估计器非常复杂并且驻留在另一个系统中.. 。 我该怎么办?(如果plot_precision_recall_curve有一个版本会很好......)。y_predy_true

标签: machine-learningscikit-learn

解决方案


您可以使用precision_recall_curve接受y_trueand y_pred,并返回precision,recallthresholds, 以进一步用于查找f1_scoreauc,后者可以让您手动绘制它。

这是一个例子

# precision-recall curve and f1
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import precision_recall_curve
from sklearn.metrics import f1_score
from sklearn.metrics import auc
from matplotlib import pyplot
# generate 2 class dataset
X, y = make_classification(n_samples=1000, n_classes=2, random_state=1)
# split into train/test sets
trainX, testX, trainy, testy = train_test_split(X, y, test_size=0.5, random_state=2)
# fit a model
model = LogisticRegression(solver='lbfgs')
model.fit(trainX, trainy)
# predict probabilities
lr_probs = model.predict_proba(testX)
# keep probabilities for the positive outcome only
lr_probs = lr_probs[:, 1]
# predict class values
yhat = model.predict(testX)
lr_precision, lr_recall, _ = precision_recall_curve(testy, lr_probs)
lr_f1, lr_auc = f1_score(testy, yhat), auc(lr_recall, lr_precision)
# summarize scores
print('Logistic: f1=%.3f auc=%.3f' % (lr_f1, lr_auc))
# plot the precision-recall curves
no_skill = len(testy[testy==1]) / len(testy)
pyplot.plot([0, 1], [no_skill, no_skill], linestyle='--', label='No Skill')
pyplot.plot(lr_recall, lr_precision, marker='.', label='Logistic')
# axis labels
pyplot.xlabel('Recall')
pyplot.ylabel('Precision')
# show the legend
pyplot.legend()
# show the plot
pyplot.show()

在此处输入图像描述


推荐阅读