当#特征很大时,改进的迭代缩放方法

时间:2013-01-08 15:10:07

标签: algorithm machine-learning

在对数线性模型中,我们可以使用IIS找到最大熵解。 我们通过找到一个参数来更新参数,这些参数使得对特征和经验期望匹配的模型期望。 但是,等式中有exp(所有特征的总和)。 我的问题是,当特征的数量很大(比如10000)时,对所有特征的求和将很容易。我们如何通过数值方法解决这个问题?对我来说似乎是不可能的,因为即使计算exp(50)也会破灭。

1 个答案:

答案 0 :(得分:3)

在日志空间中进行计算,并使用logsumexp操作(从scikit-learn借用):

// Pseudocode for 1-d version of logsumexp:
// computes log(sum(exp(x) for x in a)) in a numerically stable way.
def logsumexp(a : array of float):
    amax = maximum(a)
    sum = 0.
    for x in a:
        sum += exp(x - amax)
    return log(sum) + amax

这个求和可以在主循环开始之前完成一次,因为在优化时特征值不会改变。

旁注:IIS非常老套。 Since some 10 years,几乎每个人都在使用L-BFGS-B,OWL-QN或(A)SGD来拟合对数线性模型。