我在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.
在术语或结果中意味着什么?有没有办法克服这个问题?
答案 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。