逻辑回归交叉熵中的归一化因子

数据挖掘 机器学习 逻辑回归
2022-03-03 23:13:59

鉴于特征矩阵的概率X连同权重w计算:

def probability(X, w):
    z = np.dot(X,w)
    a = 1./(1+np.exp(-z))
    return np.array(a)

def loss(X, y, w):
    normalization_fator = X.shape[0] #store loss values
    features_probability = probability(X, w) #return one probability for each row in a matrix
    corss_entropy = y*np.log(features_probability) + (1-y)*np.log(1-features_probability)
    cost = -1/float(normalization_fator) * np.sum(corss_entropy)
    cost = np.squeeze(cost)  
    return cost

问题:我先做的,没有除以normalization_fator,但正确的方法是除以归一化因子,尽管在我对逻辑回归损失的公式中由下式给出:

L(θ)=i=1ny(i)log(αi)+(1y(i))log(1αi)

如您所见,没有归一化因子:

L(θ)=1(norm_factor)i=1ny(i)log(αi)+(1y(i))log(1αi)

编辑αi表示每一行的概率X由 sigmoid 函数给出。

1个回答

链接的答案中,有1/2在损失函数中,所以当我们降低2在导数中,这没关系,因为我们只想优化参数。我看不出有什么东西可以在你的等式中抵消,但可能还有另一个理由分开。

在您的情况下,除非您选择像零这样的愚蠢归一化因子,否则您的两个损失函数具有优化它们的相同参数,因此我们优化哪个并不重要。但是,除以某个因子可以防止数字变得太大,尤其是当您将超过数千或数十亿的预测加起来时。此外,如果您的归一化因子是样本量,您会对观察的平均交叉熵损失有所了解,就像 MSE 在我们进行线性回归时对平均平方偏差有所了解一样。