当我做:
summing += yval * np.log(sigmoid(np.dot(w.transpose(), xi.transpose()))) + (1-yval)* np.log(1-sigmoid(np.dot(w.transpose(), xi.transpose())))
Run Code Online (Sandbox Code Playgroud)
在没有除法的情况下,为什么我会得到"在日志中遇到零除"错误?结果,summing变成了[nan].
Dev*_*ark 29
这是您尝试使用0评估日志时得到的错误:
>>> import numpy as np
>>> np.log(0)
__main__:1: RuntimeWarning: divide by zero encountered in log
Run Code Online (Sandbox Code Playgroud)
我同意它不是很清楚.
所以在你的情况下,我会检查为什么你的日志输入是0.
PS:这是numpy 1.10.4
小智 13
我有同样的问题.看起来你正在尝试进行逻辑回归.我正在使用逻辑回归进行MULTI-CLASS分类.但是你需要使用ONE VS ALL方法解决这个问题(google了解详情).
如果你没有设置你的yval变量,只有'1'和'0'而不是yval = [1,2,3,4,...]等,那么你将得到导致失控的负成本theta然后导致你达到log(y)的极限,其中y接近于零.
修复应该是预处理你的yval变量,使它只有'1'和'0'表示正面和负面的例子.
小智 6
即使太晚了,这个答案也可能会帮助别人。
在您的代码部分。
... + (1-yval)* np.log(1-sigmoid(np.dot(w.transpose(), xi.transpose())))
Run Code Online (Sandbox Code Playgroud)
可以是np.dot(w.transpose(), xi.transpose())功能吐痰较大的值(高于40左右),从而产生的输出sigmoid( )是1。然后,你基本上采取np.log的1-1是0。而且正如DevShark上面提到的,它会导致RuntimeWarning: Divide by zero...错误。
您可能会问我如何得出数字40,好吧,对于大于40左右的值,python(numpy)return中的sigmoid函数1.。
查看您的实现,看来您正在处理Logistic回归算法,在这种情况下(我印象中)特征缩放非常重要。
自从我第一次写答案以来,如果我想道歉的话,可能我违反了一些规则/规定。
| 归档时间: |
|
| 查看次数: |
40566 次 |
| 最近记录: |