【问题标题】:Default choice of SVM position on ROC curveROC曲线上SVM位置的默认选择
【发布时间】:2016-02-05 06:20:25
【问题描述】:

我有一个问题,关于默认设置下 sklearn SVM 分类器在 ROC 曲线上的位置,或者如果失败,如何找出。我一直认为 ROC 曲线是对一般性能的描述,因此尝试找到分类器的确切位置对我来说是新的。

假设 ROC 曲线看起来像所提供图表上的平均值 here.

假设您在默认设置下在整个数据集上训练 SVM,它将位于 ROC 曲线的哪个位置

编辑:澄清

假设我以默认值 (sklearn) 训练 SVM,我将如何确定它在 ROC 曲线上的位置。或者,SVC 类的哪个设置允许我设置 ROC 位置?

【问题讨论】:

  • 这不是一个 stackoverflow 问题,它是一个crossvalidated question
  • ROC 是描述分类器分类效果的指标。 “试图找到确切的位置”是什么意思?不同数据集的 ROC 会有所不同。
  • 分类器输出的阈值/您选择的 ROC 曲线上的位置取决于例如在false positive rate你愿意接受。

标签: python machine-learning scikit-learn svm libsvm


【解决方案1】:

我认为您误解了 ROC 的概念。模型不会“位于 ROC 上”,模型具有 ROC 曲线。这可用于评估您的模型,或用于决定您将如何使用您的模型。

评估模型的性能

要计算模型的 ROC,请使用 roc_curve 函数,输入作为模型的预测概率,以及实际结果:

from sklearn.metrics import roc_curve
roc = roc_curve(model.predict_proba(X), y)

如果您想对模型的性能进行单一衡量,可以使用 ROC 下的区域;如果您尝试调整模型的超参数、优化特征选择等,这可能会很有用。在sklearn 中计算这个(使用 k 折交叉验证)的典型方法是:

from sklearn.cross_validation import cross_val_score
cross_val_score(model, X, y, scoring = 'roc_auc')

使用您的模型进行预测。

如果你只是调用model.predict(X),模型会根据0.5的概率阈值进行预测。这可能不是您想要的:正如@AndreHolzner 在对您的问题的评论中指出的那样,您需要使用您的 ROC 曲线来确定您愿意接受的误报率。在此之后,您只需检查您的预测概率是否高于此阈值:

thresh = 0.8
predictions = model.predict_proba(X) > thresh

【讨论】:

  • 谢谢,帮了大忙。
猜你喜欢
  • 2016-02-05
  • 2018-01-15
  • 2017-05-11
  • 2018-04-01
  • 2019-02-27
  • 2018-01-03
  • 2019-12-26
  • 2014-07-20
  • 2012-05-02
相关资源
最近更新 更多