【发布时间】:2013-12-03 20:17:05
【问题描述】:
我目前正在尝试在 MATLAB 中实现涉及 logistic loss function 的机器学习算法。不幸的是,由于数值溢出,我遇到了一些麻烦。
一般来说,对于给定的输入s,逻辑函数的值为:
log(1 + exp(s))
逻辑损失函数的斜率为:
exp(s)./(1 + exp(s)) = 1./(1 + exp(-s))
在我的算法中,s = X*beta 的值。这里X 是一个矩阵,具有N 数据点和P 每个数据点的特征(即size(X)=[N,P]),beta 是P 系数的向量,每个特征使得size(beta)=[P 1]。
我对计算给定值beta 的 Logistic 函数的平均值和梯度特别感兴趣。
Logistic 函数 w.r.t 对beta 的平均值为:
L = 1/N * sum(log(1+exp(X*beta)),1)
Logistic 函数的斜率平均值 w.r.t. b 的值是:
dL = 1/N * sum((exp(X*beta)./(1+exp(X*beta))' X, 1)'
注意size(dL) = [P 1].
我的问题是这些表达式不断产生数字溢出。问题实际上来自以下事实:exp(s)=Inf 时 s>1000 和 exp(s)=0 时 s<-1000.
我正在寻找一种解决方案,使s 可以采用浮点运算中的任何值。理想情况下,我也非常感谢能够让我以矢量化/有效方式评估值和梯度的解决方案。
【问题讨论】:
-
Berk U.:其中一个答案对您有帮助吗?
-
@A.Donda 他们很有见地,但没有处理下溢问题。我找到了另一个答案,我很快就会发布!
-
嗯,但是我给出了大小 s 的近似值,这样可以避免下溢。如果不是,请详细评论。
标签: matlab floating-point numerical-methods logistic-regression numerical-stability