我有一个表达式如下,其中由于数据是一个矩阵而theta是一个向量,python不断提高除以0的错误。但是唯一的分母是(1 + e ^ x),该矩阵中的每个元素总不能为0
np.sum(-data[:,-1]*np.log(1.0/(1.0+np.exp(-np.dot(data[:,:-1],theta.transpose())))))
我有没有忽略过会产生此错误的情况?
奇怪的是,即使每次都显示此错误,程序也运行良好并且结果正确。
从注释中给出的错误消息到问题:
py:21: RuntimeWarning: divide by zero encountered in log return (np.sum(-data[:,-1]*np.log(1.0/(1.0+np.exp(-np.dot(data[:,:-1],theta.transpose()))))-(1-data[:,-1])*np.log(1-1.0/(1.0+np.exp(-np.dot(data[:,:-1],theta.transpose())))))+np.sum(theta[1:]**2)*lamda/2.0)*1.0/data.shape[0]
看来您正在计算np.log(0)
。例如
>>> import numpy as np
>>> np.log(0)
__main__:1: RuntimeWarning: divide by zero encountered in log
-inf
>>>
这很可能是由于np.exp(...)
溢出或1.0 + np.exp(...)
返回1.0(因为np.exp(...)
小于“机器epsilon”)而引起的,并且您正在计算np.log(1.0 - 1.0/(1.0 + np.exp(...)))
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句