【问题标题】:Regularized Logistic Regression Cost Function Log(1-p) = inf正则化逻辑回归成本函数 Log(1-p) = inf
【发布时间】:2019-03-19 02:36:42
【问题描述】:

我正在尝试实现逻辑回归成本函数。
我测试了我的实现,它适用于不同的数据集。
但是当我试图用新的数据集求解时,我意识到下面方程的第二部分(term2)总是inf。问题是传递给np.log() 函数的值是0,所以它给了我inf。其实sigmoid(hypothesis(x,theta)) = 1的答案。

term1 = -y*(np.log(sigmoid(hypothesis(x,theta))))
term2 = ((1-y)*(np.log(1 - sigmoid(hypothesis(x,theta)))))
infunc1 = term1 - term2 
infunc2 = (lambda_*np.sum(theta[1:]**2))/(2*m)
j = (np.sum(infunc1)/m)+infunc2

我认为的第一个解决方案是为 0 添加一个非常小的值以防止inf。但我不知道这是否正确。 (基于此question)。

当将某些特征乘以权重的答案为零并将此答案传递给log时,我该怎么办?

感谢您的任何建议。 快乐编码

【问题讨论】:

  • 您的直觉是正确的,添加 epsilon 即可解决问题。
  • 谢谢。我应该将这个小值添加到矩阵的所有元素中还是只是元素导致inf 答案?如果我做另一件事会怎样?
  • 您可以将 epsilon 添加到所有值,或使用 numpy 掩码操作(以避免 nans 和 infs),例如np.ma.log(...).

标签: python logistic-regression


【解决方案1】:

正如朋友所说,你只需要给log函数添加一个很小的值:

epsilon = 1e-5
term1 = -y*(np.log(epsilon+sigmoid(hypothesis(x,theta))))
term2 = ((1-y)*(np.log(epsilon+1 - sigmoid(hypothesis(x,theta)))))
infunc1 = term1 - term2 
infunc2 = (lambda_*np.sum(theta[1:]**2))/(2*m)
j = (np.sum(infunc1)/m)+infunc2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-01
    • 2019-01-28
    • 2020-10-11
    • 2013-03-15
    • 2021-02-16
    • 1970-01-01
    • 2017-12-17
    相关资源
    最近更新 更多