为什么在计算逻辑回归的成本函数时收到运行时警告?

Why am I getting RunTime warning while computing cost function for logistic regression?

提问人:Mridul Hemrajani 提问时间:10/30/2023 最后编辑:Mridul Hemrajani 更新时间:10/31/2023 访问量:30

问:

<ipython-input-20-5561a7703323>:8: RuntimeWarning: divide by zero encountered in log
  cost=(-y[i]*np.log(g_i) - (1-y[i])*np.log(1-g_i))
<ipython-input-20-5561a7703323>:8: RuntimeWarning: invalid value encountered in double_scalars
  cost=(-y[i]*np.log(g_i) - (1-y[i])*np.log(1-g_i))
nan

这是我在 Jupyter Notebook 中调用以下函数时得到的输出。

def linear(x,Q):
    z=np.dot(x,Q)
    return z

def sigmoid(z):
    g_x=1/(1+np.exp(-z))
    
    return g_x

def costf(x,y,Q):
    m = y.shape[0]
    cost_sum = 0
    for i in range(m):
        z_i=linear(x[i],Q)
        g_i=sigmoid(z_i)

        cost=(-y[i]*np.log(g_i) - (1-y[i])*np.log(1-g_i))

        cost_sum+=cost

    total_cost=cost_sum/m

    return total_cost

cost=costf(x,y_pred,Q)
cost

我期望成本函数的值。我不认为数学公式有什么问题。

使用的公式

python numpy 机器学习 logistic-regression 损失函数

评论

0赞 Tim Roberts 10/30/2023
它说这是零。也许你应该检查一下。g_iassert
0赞 Mridul Hemrajani 10/30/2023
@TimRoberts g_i 0.9999999999999999991 0.99999999999093123 0.999999999999999973 1.0 1.0 0.9999999999999999805 前几次迭代的g_i。
1赞 Nick ODell 10/31/2023
如果为 1,则为零。g_i1-g_i
0赞 Tim Roberts 10/31/2023
这个公式不可能是正确的。你处于浮点数精度的最后一位,所以基本上是在产生垃圾。当你减去两个非常非常接近的浮点数时,你不会得到有意义的结果。1-g_i
0赞 Mridul Hemrajani 10/31/2023
@TimRoberts,我添加了用于计算成本函数的公式的图像链接。sigmoid 函数的结果应该在 0 和 1 之间,但 1 也作为结果出现。

答: 暂无答案