将Logistic回归损失函数转换为Softmax

时间:2016-05-22 23:05:00

标签: java logistic-regression gradient-descent softmax

我目前有一个程序,它采用特征向量和分类,并将其应用于已知权重向量,以使用Logistic回归生成损失梯度。这就是代码:

double[] grad = new double[featureSize];

        //dot product w*x
        double dot = 0;
        for (int j = 0; j < featureSize; j++) {
            dot += weights[j] * features[j];
        }

        //-yi exp(-yi w·xi) / (1+ exp(-yi w·xi))
        double gradMultiplier = (-type) * Math.exp((-type) * dot) / (1 + (Math.exp((-type) * dot)));

        //-yi xi exp(-yi w·xi) / (1+ exp(-yi w·xi))
        for (int j = 0; j < featureSize; j++) {
            grad[j] = features[j] * gradMultiplier;
        }

        return grad;

我想要做的是使用Softmax回归实现类似的东西,但我在网上找到的Softmax的所有信息并不完全遵循与我对Logit损失函数相同的词汇,所以我保持迷茫。我如何使用Softmax实现类似于上面的功能?

基于Softmax的维基百科页面,我的印象是我可能需要多个权重向量,每个可能的分类一个。我错了吗?

1 个答案:

答案 0 :(得分:1)

Softmax回归是Logistic回归的推广。在Logistic回归中,标签是二进制的,在Softmax回归中,它们可以使用两个以上的值。 Logistic回归是指二项Logistic回归,Softmax回归是指多项Logistic回归

有一个很好的页面here。在您的代码中,您似乎尝试实现梯度下降来计算weights最小化成本函数。提供的链接涵盖了此主题。

  

根据Softmax的维基百科页面,我的印象是   我可能需要多个权重向量,每个可能一个   分类。我错了吗?

你是对的。如果你有 n 特征和 K 类,那么你的权重是 n 元素的 K 向量,如链接上面。

如果有帮助,请告诉我。