可以为逻辑回归定义自己的成本函数吗?

Posted

技术标签:

【中文标题】可以为逻辑回归定义自己的成本函数吗?【英文标题】:Is it ok to define your own cost function for logistic regression? 【发布时间】:2012-08-22 21:06:41 【问题描述】:

在最小二乘模型中,成本函数定义为作为输入函数的预测值与实际值之差的平方。

在进行逻辑回归时,我们将成本函数更改为对数函数,而不是将其定义为 sigmoid 函数(输出值)与实际输出之差的平方。

是否可以改变和定义我们自己的成本函数来确定参数?

【问题讨论】:

不是那么简单,逻辑回归有许多可能的链接函数,而不仅仅是规范的 logit 函数。我建议阅读广义线性模型背后的一些理论en.wikipedia.org/wiki/Generalised_linear_model 如果您在输入 $x$ 是标量的非常特殊的情况下继续构建二次损失函数,那么您的成本函数变为:$C(w,b):= \Sigma_ x | y(x) - \haty(x)|^2=\Sigma_x | y(x) - \sigma(wx+b)|^2$。现在如果你尝试对其应用梯度下降,你会看到:$C'(x)$ 是 $\sigma'(wx+b)$ 的倍数。现在,sigmoid 函数是渐近的,当输出 $\sigma(z)$ 接近 $0$ 或 $1$ 时,它的导数 $\sigma'(z)$ 几乎为零。这意味着:当学习不好时,例如$\sigma(wx+b)\约0$,但$y(x)=1$,则$C'(w), C'(b)\约0$。 (续) 【参考方案1】:

使用逻辑函数、铰链损失、平滑铰链损失等,因为它们是零一二分类损失的上限。

这些函数通常也会对分类正确但仍靠近决策边界的示例进行惩罚,从而创建“边缘”。

所以,如果你在做二元分类,那么你当然应该选择标准的损失函数。

如果您尝试解决不同的问题,那么不同的损失函数可能会表现得更好。

【讨论】:

【参考方案2】:

是的,您可以定义自己的损失函数,但如果您是新手,最好使用文献中的一个。损失函数应该满足一些条件:

    它们应该近似于您试图最小化的实际损失。正如在另一个答案中所说,分类的标准损失函数是零一损失(错误分类率),用于训练分类器的损失函数是该损失的近似值。

    没有使用线性回归的平方误差损失,因为它不能很好地近似零一损失:当您的模型预测某个样本的 +50 而预期的答案是 +1(正类)时,预测在决策边界的正确一侧,因此零一损失为零,但平方误差损失仍然是 49² = 2401。一些训练算法会浪费大量时间来获得非常接近 -1, +1 而不是只关注正确的标志/类别标签。(*)

    损失函数应该适用于您预期的优化算法。这就是为什么不直接使用零一损失的原因:它不适用于基于梯度的优化方法,因为它没有明确定义的梯度(甚至是 subgradient,就像 SVM 的铰链损失一样) .

    直接优化零一损失的主要算法是老的perceptron algorithm。

此外,当您插入自定义损失函数时,您不再构建逻辑回归模型,而是构建其他类型的线性分类器。

(*) 平方误差 与线性判别分析一起使用,但这通常以封闭形式而不是迭代来解决。

【讨论】:

关于第 1 点,在逻辑回归中,模型永远无法预测 +50,因为输出由逻辑函数缩放,将输入限制为 (0,1)。【参考方案3】:

是的,可以使用其他成本函数来确定参数。

平方误差函数(线性回归常用的函数)不太适合逻辑回归。

在逻辑回归的情况下,假设是非线性的(sigmoid 函数),这使得平方误差函数是非凸的。

对数函数是一个没有局部最优值的凸函数,所以梯度下降效果很好。

【讨论】:

【参考方案4】:

你不选择损失函数,你选择模型

当您使用最大似然估计 (MLE) 拟合参数时,损失函数通常由模型直接确定,这是机器学习中最流行的方法。

您提到了均方误差作为线性回归的损失函数。然后“我们将成本函数更改为对数函数”,指的是交叉熵损失。我们没有改变成本函数。实际上,当我们假设y服从正态分布的高斯分布时,均方误差是线性回归的交叉熵损失,其均值由Wx + b定义。

说明

使用 MLE,您可以选择参数,以使训练数据的可能性最大化。整个训练数据集的可能性是每个训练样本的可能性的乘积。因为这可能下溢为零,所以我们通常最大化训练数据的对数似然/最小化负对数似然。因此,成本函数变为每个训练样本的负对数似然之和,由下式给出:

-log(p(y | x; w))

其中 w 是我们模型的参数(包括偏差)。现在,对于逻辑回归,这就是您提到的对数。但是声称这也对应于线性回归的 MSE 呢?

示例

为了显示 MSE 对应于交叉熵,我们假设 y 正态分布在平均值附近,我们使用 w^T x + b 进行预测。我们还假设它有一个固定的方差,所以我们不用线性回归预测方差,只预测高斯的平均值。

p(y | x; w) = N(y; w^T x + b, 1)

你可以看到mean = w^T x + bvariance = 1

现在,损失函数对应于

-log N(y; w^T x + b, 1)

如果我们看一下高斯N 是如何定义的,我们会看到:

现在,取它的负对数。这导致:

我们选择了 1 的固定方差。这使第一项保持不变,并将第二项减少为:

0.5 (y - mean)^2

现在,请记住我们将平均值定义为 w^T x + b。由于第一项是常数,最小化高斯的负对数对应于最小化

(y - w^T x + b)^2

这对应于最小化均方误差。

【讨论】:

【参考方案5】:

假设在您的逻辑回归模型中,您有标量输入 x,并且模型为每个输入样本 x 输出概率 $\haty(x)=sigma(wx+b)$。如果您继续在输入 $x$ 是标量的非常特殊的情况下构建二次损失函数,那么您的成本函数变为: $C(w,b):= \Sigma_x | y(x) - \haty(x)|^2=\Sigma_x | y(x) - \sigma(wx+b)|^2$。现在如果你尝试对其应用梯度下降,你会看到:$C'(w), C'(b)$ 是 $\sigma'(wx+b)$ 的倍数。现在,sigmoid 函数是渐近的,当输出 $\sigma(z)$ 接近 $0$ 或 $1$ 时,它的导数 $\sigma'(z)$ 几乎为零。这意味着:当学习不好时,例如$\sigma(wx+b)\约0$,但$y(x)=1$,则$C'(w), C'(b)\约0$。

现在,从两个角度来看,上述情况很糟糕:(1) 它使梯度下降在数值上变得更加昂贵,因为即使我们离最小化 C(w,b) 还很远,我们的收敛速度也不够快,并且(2) 与人类学习有悖常理:当我们犯了大错时,我们学得很快。

但是,如果您计算交叉熵成本函数的 C'(w) 和 C'(b),则不会出现此问题,因为与二次成本的导数不同,交叉熵成本的导数不是$sigma'(wx+b)$ 的倍数,因此当逻辑回归模型输出接近 0 或 1 时,梯度下降不一定会减慢,因此收敛到最小值的速度会更快。您可以在这里找到相关讨论:http://neuralnetworksanddeeplearning.com/chap3.html,我强烈推荐的优秀在线书籍!

此外,交叉熵成本函数只是用于估计模型参数的最大似然函数 (MLE) 的负对数,实际上在线性回归的情况下,最小化二次成本函数相当于最大化 MLE,或者等效地,最小化 MLE=cross entropy 的负对数,并使用线性回归的基本模型假设 - 有关更多详细信息,请参见 http://cs229.stanford.edu/notes/cs229-notes1.pdf 的第 12 页。因此,对于任何机器学习模型,无论是分类还是回归,通过最大化 MLE(或最小化交叉熵)来找到参数具有统计意义,而最小化逻辑回归的二次成本没有任何意义(尽管它对于线性回归,如前所述)。

我希望它能澄清一些事情!

【讨论】:

【参考方案6】:

我想说,均方误差的数学基础是误差的高斯分布,而对于逻辑回归,它是两个分布的距离:基础(基本事实)分布和预测分布。

我们如何测量两个分布之间的距离?在信息论中,它是相对熵(也称为KL散度),相对熵is equivalent to交叉熵。而逻辑回归函数是softmax regression的一个特例,相当于交叉熵和maximum entropy。

【讨论】:

以上是关于可以为逻辑回归定义自己的成本函数吗?的主要内容,如果未能解决你的问题,请参考以下文章

逻辑回归 - 计算成本函数会返回错误的结果

对于某些 theta 值,逻辑回归的成本函数输出 NaN

逻辑回归成本函数 scikit learn

机器学习逻辑回归和线性回归的区别?(面试回答)

逻辑回归

为啥逻辑回归的代价函数有对数表达式?