如何理解scikit-learn逻辑回归代码中的损失函数?
How to understand the loss function in scikit-learn logestic regression code?
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-learn 逻辑回归中损失函数的编码,它与对数损失函数的一般形式有什么关系?
提前致谢。
首先你应该注意到 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 是分配给各个样本的可选权重数组。如果未提供,则每个样品都具有单位重量。所以,它应该等于一(因为在交叉熵损失的原始定义中我们不考虑不同样本的不等权重),因此损失减少到:
- 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.
的回复
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-learn 逻辑回归中损失函数的编码,它与对数损失函数的一般形式有什么关系?
提前致谢。
首先你应该注意到 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 是分配给各个样本的可选权重数组。如果未提供,则每个样品都具有单位重量。所以,它应该等于一(因为在交叉熵损失的原始定义中我们不考虑不同样本的不等权重),因此损失减少到:
- 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.
的回复