为什么不用平方误差(MSE)作为Logistic回归的损失函数?

Posted 拉风小宇

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么不用平方误差(MSE)作为Logistic回归的损失函数?相关的知识,希望对你有一定的参考价值。

在学习logistic regression(逻辑斯蒂回归)的时候,我们用类似交叉熵的损失函数Log误差: L ( y − y ^ ) = − ∑ i = 1 n y i log ⁡ ( y ^ i ) L(y-\\haty)=-\\sum_i=1^ny_i\\log(\\haty_i) L(yy^)=i=1nyilog(y^i),而不是在线性回归里常用的平均平方误差(MSE): L ( y − y ^ ) = ∑ i = 1 n ( y i − y ^ i ) 2 L(y-\\haty)=\\sum_i=1^n(y_i-\\haty_i)^2 L(yy^)=i=1n(yiy^i)2.

我最近找到一篇博文讲得不错,这两天翻译一下,顺便求一波thesis高分😏

Why not Mean Squared Error(MSE) as a loss function for Logistic Regression? – Rajesh Shreedhar Bhat, Souradip Chakraborty

在这篇博文中,我们主要对比在逻辑斯蒂回归中的log loss(对数损失)和mean squared error(平均平方误差),并且根据经验和数学分析证明为什么我们推荐使用“log loss”

分类问题和损失函数基础

两种误差的数学公式如下图:
Log loss:

Mean Squared Loss:

在上面两公式中的字母含义如下:
y y y: actual label(真实标签)
y ^ \\haty y^: predicted value(预测标签)
n n n: number of classes(类别数)

当我们有一个两个类的数据集时( n = 2 n=2 n=2),我们用“0”和“1”来表示这两个类。

下面我们展示当预测标签和真实标签出现错误的时候,为什么log-loss比MSE更优

例如:

  • 在数据集中的样例的真实标签是“1”
  • 在用sigmoid函数之后,预测值给的标签是“0”

当以MSE为损失值:
( 1 − 0 ) 2 = 1 (1 - 0)^2 = 1 (10)2=1
当以log loss为损失值:
在计算之前,我们先来看一下 log ⁡ ( x ) \\log(x) log(x)的函数图像

可以看出当 x x x趋近于0时, log ⁡ ( x ) \\log(x) log(x)倾向于负无穷。

因此。loss value损失值为:
− ( 1 × log ⁡ ( 0 ) + 0 × log ⁡ ( 1 ) ) → i n f i n i t y -(1\\times \\log(0) + 0\\times \\log(1)) \\rightarrow infinity (1×log(0)+0×log(1))infinity
可以看出,计算MSE的损失值大大小于log loss.因此可以得到结论:计算MSE不会重重地惩罚错误分类,哪怕是完全分错!

然而,当预测准了的时候,我们再计算一下损失值如下:
真实标签:“1”
预测值:“1”
MSE: ( 1 − 1 ) 2 = 0 (1-1)^2 = 0 (11)2=0
Log loss: − ( 1 × log ⁡ ( 1 ) + 0 × log ⁡ ( 0 ) ) = 0 -(1\\times \\log(1) + 0\\times \\log(0))=0 (1×log(1)+0×log(0))=0

至此,我们已经展示了MSE对于二分类问题不是一个好的选择。相似的结论可以扩展到(one-hot)1-热点编码的多分类问题。

MSE和在Logistic回归的非凸问题

在分类问题中,我们通常会利用梯度下降手段(例如Newton Raphson,梯度下降等等)通过最小化损失函数去寻找系数的最优解。因此如果损失函数是非凸的,我们无法保证总能找到全局最小值,相对地,我们会很可能陷入局部最小值。

在证明为什么MSE在logistic 回归中不是一个凸函数之前,让我们来看一下函数为凸的条件是什么。

n − n- n维区间上的一个实值函数是凸的:任意两点的连线都等于或者大于函数图像。(如下图)

如果 f f f是二次可微的而且定义域是实数轴,我们有如下结论:
f f f是凸的,当且仅当 f ′ ′ ( x ) ≥ 0 f''(x) \\geq0 f(x)0.也就是损失函数的二重微分大于等于0,因此是凸的,关于凸函数可以参考这只影片

现在我们将数学地证明对于逻辑斯蒂回归的MSE损失是非凸的

简单来讲,假设对于一个给定数据集只有一个特征" x x x“和"二分类标签”,下图中 f ( x ) = M S E f(x)= MSE f(x)=MSE并且 y ^ \\haty y^是在用了sigmoid函数之后的预测值标签

从上式中, y ^ × ( 1 − y ^ ) \\haty\\times(1-\\haty) y^×(1y^) [ 0 , 1 ] [0,1] [0,1].因此我们必须检查对于任意的" x x x", H ( y ^ ) H(\\haty) H(y^)是否是正的,以检查其是否是凸函数。

我们已知 y y y可以取的值是0或者1.因此我们对于这两种情况分别检查凸函数的条件

在上述情况,也就是当 y = 0 y=0 y=0时候。当 y ^ ∈ [ 0 , 2 / 3 ] \\haty\\in [0,2/3] y^[0,2/3],函数 H ( y ^ ) ≥ 0 H(\\haty)\\geq0 H(y^)0,并且当 y ^ ∈ [ 1 / 3 , 1 ] \\haty\\in [1/3,1] y^[1/3,1] H ( y ^ ) ≤ 0 H(\\haty)\\leq0 H(y^)0。这代表函数是非凸的

y = 1 y=1 y=1。当 y ^ ∈ [ 0 , 1 / 3 ] \\haty\\in [0,1/3] y^[0,1/3],函数 H ( y ^ ) ≤ 0 H(\\haty)\\leq0 H(y^)0,并且当 y ^ ∈ [ 1 / 3 , 1 ] \\haty\\in [1/3,1] y^[1/3,1] H ( y ^ ) ≥ 0 H(\\haty)\\geq0 H(y^)0。这同样代表函数是非凸的

因此,基于以上分析我们已经得到在logistic回归中的MSE是非凸的,因此我们不推荐使用之。

log loss在Logistic回归的凸性

下面来到我们的最终问题了:那么“log loss”函数是凸的吗?我们会数学地展示对于logistic回归log损失函数是凸的

其中 θ \\theta θ是自变量 x x x的系数

从上面公式的最后一行( l o g log log损失函数的二重微分)可以看出:平方项始终是非负的,并且我们知道 e x e^x ex的值域是 ( 0 , + ∞ ) (0,+\\infty) (0,+)。因此最终项始终是非负的,从而可以得到我们的最终结论:

l o g   l o s s log\\ loss log loss函数在所有情况下都是凸函数!!

以上是关于为什么不用平方误差(MSE)作为Logistic回归的损失函数?的主要内容,如果未能解决你的问题,请参考以下文章

均方误差(MSE)和均方根误差(RMSE)和平均绝对误差(MAE)

回归任务中的评价指标之MSE,RMSE,MAE,R-Squared,MAPE

数学基础--MATLAB 数据拟合 SSE,MSE,RMSE,R-square

数学基础--MATLAB 数据拟合 SSE,MSE,RMSE,R-square

Python计算统计分析MSE RMSE MAEr2

RMS:均方根值,RMSE:均方根误差,MSE:标准差