Python 如何理解scikit learn logestic回归代码中的损失函数?

Python 如何理解scikit learn logestic回归代码中的损失函数?,python,machine-learning,scikit-learn,loss-function,Python,Machine Learning,Scikit Learn,Loss Function,scikit learn logestic回归中损失函数的代码为: # 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)) (请参阅) 有谁能告诉我如何理解

scikit learn logestic回归中损失函数的代码为:

# 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))
(请参阅)

有谁能告诉我如何理解在scikit中为损失函数编写代码,学习对数回归,以及它与对数损失函数的一般形式之间的关系吗


提前谢谢。

首先,您应该注意,
0.5*alpha*np.dot(w,w)
只是一个标准化。因此,sklearn logistic回归简化为以下内容

-np.总和(样本重量*对数逻辑(yz))

此外,NP.SUM <代码>是由于它考虑多个样本的事实,所以它又减少到

sample\u weight*log\u logistic(yz)

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

-log\u物流(yz)

这相当于

-log\u logistic(y*np.dot(X,w))

现在,为什么它看起来与交叉熵损失函数不同(本质上是相同的),即。e、 :

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

原因是,我们可以使用两种不同的标签约定来进行二进制分类,或者使用
{0,1}
或者
{-1,1}
,这导致了两种不同的表示。但是他们是一样的


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

你好,Meysam Sadeghi,您的回答非常有用。谢谢。我还有另一个问题:scikit学习对数回归中“样本权重”和“类别权重”之间的关系是什么?最美好的祝愿!我尽量简单地解释一下:class_权重可用于处理不同类中数据量不相等的情况。假设你测试了1000名罕见癌症患者,990名健康,10名患有癌症。如果你的模型总是告诉你每个人都健康,那么它的准确率为0.99%。但是,如果(例如)你将等级的权重与样本数量成反比(癌症病例为1000/10=100,癌症病例为1000/990=1.01),你就可以处理这个问题。。。。继续。。。样本权重用于强调您更感兴趣/关注的样本。假设您有100个样本,但其中10个(它们所属的类别并不重要,但样本本身很重要,因此让我们假设在二元分类问题中有5个正样本和5个负样本)来自您将要竞争的竞争,其余的(其他90个)只是从web上找到的一些数据,它们并没有那么重要…继续。。。然后,您可以为这10个样本设置更高的样本权重,并确保在训练模型时适当强调这些样本。