如何在python scikit-learn中优化精确回忆曲线而不是AUC-ROC曲线?

时间:2016-02-28 23:28:36

标签: python-2.7 machine-learning scikit-learn roc precision-recall

我正在问我之前发布的帖子Good ROC curve but poor precision-recall curve中提出的后续问题。我只使用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 个答案:

答案 0 :(得分:3)

你的一个实际上有两个问题:

  1. 如何评估单个数字中精确召回曲线的好坏程度?
  2. 如何建立模型以最大化此数量?
  3. 我将依次回答:

    <强> 1。精确回忆曲线的质量度量为average precision 。该平均精度等于非插值(即分段常数)精确回忆曲线下的精确面积。

    <强> 2。要最大化平均精度,您只能调整算法的超参数。如果您设置GridSearchCV,则可以使用scoring='average_precision'执行此操作。或者您可以手动或使用其他调整技术找到最佳超参数。

    通常不可能直接优化平均精度(在模型拟合期间),但也有一些例外。例如。 this article描述了一种最大化平均精度的SVM。