问题背景
博主在调用sklearn.metrics.roc_auc_score()计算AUC时出现了这个报错
问题分析
错误提示说数据里面包含空值或者无穷大的数据,参与计算的两列数据有一列不是1就是0,另一列是楼主自己写的sigmoid函数计算出来的值,但是sigmoid函数不太可能算出无穷大的数值,所以关注是不是有哪个数出问题算出空值了。
先检查有哪些列存在空值
data = pd.read_csv('filename.csv')
print(data.isnull().any())12
打印出来下面的结果:
date False
predict True
time False
true_value False
measure False
dtype: bool123456
说明predict列存在空值,确实是sigmoid函数算出来的结果出了问题。
接下来我们可以查看出现空值的是哪些记录
predict_null = pd.isnull(data['predict'])
data_null = data[predict_null == True]
print(data_null)123
打印出来下面的结果:
date predict time true_value
301258 2017-08-22 07:14:31 NaN 2017-08-22 07:14:31 0
301259 2017-08-22 07:14:46 NaN 2017-08-22 07:14:46 0
301260 2017-08-22 07:15:01 NaN 2017-08-22 07:15:01 0
301261 2017-08-22 07:15:16 NaN 2017-08-22 07:15:16 0
301262 2017-08-22 07:15:31 NaN 2017-08-22 07:15:31 0 123456
之后就可以到原始数据里找计算结果在哪里出错了。
博主出错的原因是输入sigmoid函数的中间计算结果存在除0的问题,所以在sigmoid计算之后返回了NaN,但是参与计算的是一列数,所以在程序运行过程中没有打印除0的报错。