Я нарисовал кривую точности-отзыва, используя sklearn
precision_recall_curve
function и matplotlib
package. Те из вас, кто знаком с кривой точности-отзыва, знают, что некоторые научные сообщества принимают ее только тогда, когда она интерполируется, как в этом примере здесь. Теперь мой вопрос: знает ли кто-нибудь из вас, как выполнять интерполяцию в Python? Некоторое время я искал решение, но безуспешно! Любая помощь будет принята с благодарностью.
Решение. Оба решения от @francis и @ali_m верны и вместе решили мою проблему. Итак, предполагая, что вы получаете результат от функции precision_recall_curve
в sklearn
, вот что я сделал для построения графика:
precision["micro"], recall["micro"], _ = precision_recall_curve(y_test.ravel(),scores.ravel())
pr = copy.deepcopy(precision[0])
rec = copy.deepcopy(recall[0])
prInv = np.fliplr([pr])[0]
recInv = np.fliplr([rec])[0]
j = rec.shape[0]-2
while j>=0:
if prInv[j+1]>prInv[j]:
prInv[j]=prInv[j+1]
j=j-1
decreasing_max_precision = np.maximum.accumulate(prInv[::-1])[::-1]
plt.plot(recInv, decreasing_max_precision, marker= markers[mcounter], label=methodNames[countOfMethods]+': AUC={0:0.2f}'.format(average_precision[0]))
И эти строки построят интерполированные кривые, если вы поместите их в цикл for и передадите ему данные каждого метода на каждой итерации. Обратите внимание, что при этом не будут построены неинтерполированные кривые прецизионного возврата.