在传递给'auc'之前如何处理从'roc_curve'返回的NaN?

时间:2013-07-17 06:36:50

标签: scikit-learn

我在scikit-learn中使用指标模型中的'roc_curve'。该示例显示'roc_curve'应在'auc'之前调用,类似于:

fpr, tpr, thresholds = metrics.roc_curve(y, pred, pos_label=2)

然后:

metrics.auc(fpr, tpr)

但是会返回以下错误:

Traceback (most recent call last):   File "analysis.py", line 207, in <module>
    r = metrics.auc(fpr, tpr)   File "/apps/anaconda/1.6.0/lib/python2.7/site-packages/sklearn/metrics/metrics.py", line 66, in auc
    x, y = check_arrays(x, y)   File "/apps/anaconda/1.6.0/lib/python2.7/site-packages/sklearn/utils/validation.py", line 215, in check_arrays
    _assert_all_finite(array)   File "/apps/anaconda/1.6.0/lib/python2.7/site-packages/sklearn/utils/validation.py", line 18, in _assert_all_finite
    raise ValueError("Array contains NaN or infinity.") ValueError: Array contains NaN or infinity.

在术语或结果中意味着什么?有没有办法克服这个问题?

2 个答案:

答案 0 :(得分:0)

您是否正在尝试使用roc_curve来评估多类分类器?换句话说,如果您在非二进制的分类问题上使用roc_curve,那么这将无法正常工作。有数学可用于多维ROC分析,但python中的当前ROC方法没有实现它们。

评估尝试使用类似方法的多类问题:来自sklearn的confusion_matrix和classification_report,以及来自skll的kappa()。

答案 1 :(得分:0)

您声明这一行:

fpr, tpr, thresholds = metrics.roc_curve(y, pred, pos_label=2)

由此得出的结论是,您可能复制了同样使用“pos_label=2”的 sklearn 示例。

但是,在大多数情况下,您希望“pos_label”为 1。因此,如果您的代码输出概率并且它们介于 0 和 1 之间,那么您的 pos_label 应该为 1。