2

我在 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.

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

4

2 回答 2

0

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

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

于 2013-12-01T17:29:24.110 回答
0

你声明这一行:

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

这导致您可能已经复制了也使用“pos_label = 2”的sklearn示例的结论。

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

于 2021-07-14T07:51:26.073 回答