Как оптимизировать кривую точности-отзыва вместо кривой AUC-ROC в python scikit-learn?
Я задаю дополнительный вопрос, как это было предложено в моем предыдущем посте - Хорошая кривая ROC, но плохая кривая точности-отзыва. Я использую только настройку по умолчанию с Python scikit-learn. Похоже, что оптимизация выполняется на AUC-ROC, но я больше заинтересован в оптимизации точности отзыва. Ниже приведены мои коды.
# Get ROC
y_score = classifierUsed2.decision_function(X_test)
false_positive_rate, true_positive_rate, thresholds = roc_curve(y_test, y_score)
roc_auc = auc(false_positive_rate, true_positive_rate)
print 'AUC-'+ethnicity_tar+'=',roc_auc
# Plotting
ax1.plot(false_positive_rate, true_positive_rate, c=color, label=('AUC-'+ethnicity_tar+'= %0.2f'%roc_auc))
ax1.plot([0,1],[0,1], color='lightgrey', linestyle='--')
ax1.legend(loc='lower right', prop={'size':8})
# Get P-R pairs
precision, recall, prThreshold = precision_recall_curve(y_test, y_score)
# Plotting
ax2.plot(recall, precision, c=color, label=ethnicity_tar)
ax2.legend(loc='upper right', prop={'size':8})
Где и как я могу вставить коды Python, чтобы изменить настройку, чтобы я мог оптимизировать повторный вызов?
1 ответ
На самом деле у вас есть два вопроса:
- Как оценить, насколько точна кривая точного отзыва в одном числе?
- Как построить модель, чтобы максимально увеличить это число?
Я отвечу на них по очереди:
1. Показателем качества кривой точности-отзыва является средняя точность. Эта средняя точность равна точной площади под непере интерполированной (то есть кусочно-постоянной) кривой точного возврата.
2. Чтобы максимизировать среднюю точность, вы можете настроить только гиперпараметры вашего алгоритма. Вы можете сделать это с GridSearchCV
, если вы установите scoring='average_precision'
, Или вы можете найти оптимальные гиперпараметры вручную или с помощью другой техники настройки.
Как правило, невозможно напрямую оптимизировать среднюю точность (во время подгонки модели), но есть некоторые исключения. Например, эта статья описывает SVM, которая максимизирует среднюю точность.