如何理解scikit-learn逻辑回归代码中的损失函数?

问题描述 投票:-1回答:1

scikit-learn逻辑回归中的损失函数代码是:

# Logistic loss is the negative of the log of the logistic function.
    out = -np.sum(sample_weight * log_logistic(yz)) + .5 * alpha * np.dot(w, w)

但是,它似乎与对数损失函数的常见形式不同,后者的内容如下:

-y(log(p)+(1-y)log(1-p))

(请参阅http://wiki.fast.ai/index.php/Log_Loss

谁能告诉我如何理解scikit中的损失函数代码 - 学习logestic回归以及它与对数损失函数的一般形式之间的关系是什么?

先感谢您。

python machine-learning scikit-learn loss-function
1个回答
1
投票

首先你应该注意到0.5 * alpha * np.dot(w, w)只是一个标准化。因此,sklearn逻辑回归减少到以下

-np.sum(sample_weight * log_logistic(yz))

此外,np.sum是由于它考虑多个样本的事实,所以它再次减少到

sample_weight * log_logistic(yz)

最后,如果您阅读HERE,您会注意到sample_weight是一个可选的权重数组,分配给各个样本。如果没有提供,则每个样品给定单位重量。因此,它应该等于1(如在交叉熵损失的原始定义中我们不考虑不同样本的不等权重),因此损失减少到:

- log_logistic(yz)

这相当于

- log_logistic(y * np.dot(X, w))

现在,为什么它从交叉熵损失函数看起来不同(实质上它是相同的),i。 Ë:

- [y log(p) + (1-y) log(1-p))]

原因是,我们可以使用两种不同的标记惯例进行二元分类,使用{0, 1}{-1, 1},这会导致两种不同的表示形式。但它们是一样的!

更多细节(关于为什么它们是相同的)可以找到HERE。请注意,您应阅读Manuel Morales的回复。

© www.soinside.com 2019 - 2024. All rights reserved.