Я нарисовал кривую прецизионного отзыва, используя sklearn
precision_recall_curve
функция и matplotlib
упаковка. Для тех из вас, кто знаком с кривой прецизионного отзыва, вы знаете, что некоторые научные сообщества принимают его только при его интерполяции, подобно этому примеру here. Теперь мой вопрос в том, что кто-нибудь из вас знает, как сделать интерполяцию в python? Я искал решение какое-то время, но без успеха! Любая помощь будет принята с благодарностью.Как нарисовать кривую прецизионного отзыва с интерполяцией в 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]))
И эти линии будет строить интерполированные кривые, если вы поместите их в цикле и проход это данные каждого метода на каждой итерации. Обратите внимание, что это не приведет к построению неинтерполированных кривых прецизионного отзыва.
Спасибо за ответ. Я также написал решение, адаптированное к выходу precision_recall_curve в sklearn. – user823743