我有一个如下表达式,其中数据是一个矩阵,而 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())))))
是否有任何我忽略的情况会产生此错误?
奇怪的是,程序运行良好,即使每次都显示此错误,结果也是正确的。
答案 0 :(得分:0)
从评论中给出的错误消息到问题:
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)
。 E.g。
>>> 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”)并且您正在计算{{1} }。