Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x sklearn的log_损失提供nan,而tensorflow.loss.log_损失有效_Python 3.x_Tensorflow_Scikit Learn_Log Likelihood - Fatal编程技术网

Python 3.x sklearn的log_损失提供nan,而tensorflow.loss.log_损失有效

Python 3.x sklearn的log_损失提供nan,而tensorflow.loss.log_损失有效,python-3.x,tensorflow,scikit-learn,log-likelihood,Python 3.x,Tensorflow,Scikit Learn,Log Likelihood,我有一个二进制分类问题。 我正在使用来自tensorflow.loss.log\u loss的log\u loss 为了检查,我使用sklearn.metrics.log\u loss。大多数情况下,这两个函数给出相同的结果(只是数据类型不同)。在某些情况下,sklearn函数返回NaN,而tf.loss.log\u loss返回正确的值 数据如下: 代码: 似乎发生了一些log(0),但是为什么tensorflow没有这个问题呢 将两个数组的数据类型更改为64位浮点可以修复此问题 dtype

我有一个二进制分类问题。 我正在使用来自
tensorflow.loss.log\u loss
的log\u loss

为了检查,我使用
sklearn.metrics.log\u loss
。大多数情况下,这两个函数给出相同的结果(只是数据类型不同)。在某些情况下,
sklearn
函数返回
NaN
,而
tf.loss.log\u loss
返回正确的值

数据如下:

代码:


似乎发生了一些
log(0)
,但是为什么tensorflow没有这个问题呢

将两个数组的数据类型更改为64位浮点可以修复此问题

dtype=np.float64

例如,添加
y\u pred=y\u pred.astype(np.float64)

另一种解决问题的方法是为
log\u loss
提供
eps=1e-7
,这是
float32
更合适的epsilon,也是tensorflow使用的。
但是,Scikit使用
1e-15
作为默认值(预期为
float64
)。

这看起来像是您在我得到相同结果时偶然发现了一个bug。它看起来像某种形式的溢出,因为获取列表的子部分效果很好,所以它不是一个特定的值。为什么?我也偶然发现了这个问题,但奇怪的是,将我的numpy数组转换为pandas系列的dtype float64解决了这个问题!非常感谢。我使用了scikit learn
permutation\u importance
,因此得到了NaN表示重要性。在记分器中设置eps可解决此问题。:)
dtype=np.float64