【发布时间】: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