常见回归和分类损失函数比较

<br>html

##<font color=#1E90FF>代码</font>git

<br>github

损失函数的通常表示为$L(y,f(x))$,用以衡量真实值$y$和预测值$f(x)$之间不一致的程度,通常越小越好。为了便于不一样损失函数的比较,常将其表示为单变量的函数,在回归问题中这个变量为$y-f(x)$,在分类问题中则为$yf(x)$。下面分别进行讨论。算法

<br><br>函数

<font size=5>回归问题的损失函数</font>学习

回归问题中$y$和$f(x)$皆为实数$\in R$,所以用残差 $y-f(x)$来度量两者的不一致程度。残差 (的绝对值) 越大,则损失函数越大,学习出来的模型效果就越差(这里不考虑正则化问题)。 <br> 常见的回归损失函数有优化

  • 平方损失 (squared loss) : $(y-f(x))^2$
  • 绝对值 (absolute loss) : $|y-f(x)|$
  • Huber损失 (huber loss) : $\left{\begin{matrix}\frac12[y-f(x)]^2 & \qquad |y-f(x)| \leq \delta \ \delta|y-f(x)| - \frac12\delta^2 & \qquad |y-f(x)| > \delta\end{matrix}\right.$

<br> 其中最经常使用的是平方损失,然而其缺点是对于异常点会施以较大的惩罚,于是不够robust。若是有较多异常点,则绝对值损失表现较好,但绝对值损失的缺点是在$y-f(x)=0$处不连续可导,于是不容易优化。 <br> Huber损失是对两者的综合,当$|y-f(x)|$小于一个事先指定的值$\delta$时,变为平方损失,大于$\delta$时,则变成相似于绝对值损失,所以也是比较robust的损失函数。三者的图形比较以下:翻译

<br>代理


<br><br> <font size=5>分类问题的损失函数</font>htm

对于二分类问题,$y\in \left{-1,+1 \right}$,损失函数常表示为关于$yf(x)$的单调递减形式。以下图:

<br>

$yf(x)$被称为margin,其做用相似于回归问题中的残差 $y-f(x)$。 <br> 二分类问题中的分类规则一般为 $\text{sign}(f(x)) = \left{\begin{matrix} +1 \qquad\text{if};;yf(x) \geq 0 \ -1 \qquad \text{if} ;; yf(x) < 0\end{matrix}\right.$

能够看到若是 $yf(x) > 0$,则样本分类正确,$yf(x) < 0$ 则分类错误,而相应的分类决策边界即为 $f(x) = 0$。因此最小化损失函数也能够看做是最大化 margin 的过程,任何合格的分类损失函数都应该对 margin<0 的样本施以较大的惩罚。

<br><br>

<font size=4> 一、 0-1损失 (zero-one loss) </font>

$$L(y,f(x)) = \left{\begin{matrix} 0 \qquad \text{if} ;; yf(x)\geq0 \ 1 \qquad \text{if} ;; yf(x) < 0\end{matrix}\right.$$

0-1损失对每一个错分类点都施以相同的惩罚,这样那些“错的离谱“ (即 $margin \rightarrow -\infty$)的点并不会收到大的关注,这在直觉上不是很合适。另外0-1损失不连续、非凸,优化困难,于是常使用其余的代理损失函数进行优化。

<br><br><br>

<font size=4> 二、Logistic loss</font> $$L(y,f(x)) = log(1+e^{-yf(x)})$$

<br>

logistic Loss为Logistic Regression中使用的损失函数,下面作一下简单证实:

<br>

Logistic Regression中使用了Sigmoid函数表示预测几率:$$g(f(x)) = P(y=1|x) = \frac{1}{1+e^{-f(x)}}$$

而$$P(y=-1|x) = 1-P(y=1|x) = 1-\frac{1}{1+e^{-f(x)}} = \frac{1}{1+e^{f(x)}} = g(-f(x))$$

所以利用$y\in\left{-1,+1\right}$,可写为$P(y|x) = \frac{1}{1+e^{-yf(x)}}$,此为一个几率模型,利用极大似然的思想:

​ $$max \left(\prod\limits_{i=1}^m P(y_i|x_i)\right) = max \left(\prod\limits_{i=1}^m \frac{1}{1+e^{-y_if(x_i)}}\right)$$

<br>

两边取对数,又由于是求损失函数,则将极大转为极小:

$$max\left(\sum\limits_{i=1}^m logP(y_i|x_i)\right) = -min \left(\sum\limits_{i=1}^m log(\frac{1}{1+e^{-y_if(x_i)}})\right) = min\left(\sum\limits_{i=1}^m log(1+e^{-y_if(x_i)}\right)$$

这样就获得了logistic loss。

<br><br>

若是定义$t = \frac{y+1}2 \in \left{0,1\right}$,则极大似然法可写为:

$$\prod\limits_{i=1}^m (P(t_i=1|x_i))^{t_i}((1-P(t_i=1|x))^{1-t_i}$$

取对数并转为极小得:

$$\sum\limits_{i=1}^m \big{ -t_i\log P(t_i=1|x_i) - (1-t_i)\log (1-P(t_i=1|x_i))\big}$$

上式被称为交叉熵损失 (cross entropy loss),能够看到在二分类问题中logistic loss和交叉熵损失是等价的,两者区别只是标签y的定义不一样。

<br><br><br>

<font size=4> 三、Hinge loss</font> $$L(y,f(x)) = max(0,1-yf(x))$$

<br>

hinge loss为svm中使用的损失函数,hinge loss使得$yf(x)>1$的样本损失皆为0,由此带来了稀疏解,使得svm仅经过少许的支持向量就能肯定最终超平面。

hinge loss被翻译为“合页损失”,那么合页究竟长啥样?如图,确实有点像hinge loss的形状:

来看下 hinge loss 是如何推导出来的,带软间隔的svm最后的优化问题可表示为: $$ \begin{align} & \mathop{min}\limits_{\boldsymbol{w},b,\xi} \frac12 ||\boldsymbol{w}||^2 + C\sum\limits_{i=1}^m\xi_i \tag{1}\ & s.t. \quad y_i(\boldsymbol{w}^T\boldsymbol{x}_i + b) \geqslant 1 - \xi_i \tag{2}\ & \qquad;;;\xi_i \geqslant 0; , ;;;;i = 1,2,..., m \tag{3} \end{align} $$ $(2)$ 式从新整理为 $ \xi_i \geqslant 1 - y_i(\boldsymbol{w}^T\boldsymbol{x}_i + b)$ 。若 $1 - y_i(\boldsymbol{w}^T\boldsymbol{x}_i + b) < 0$ ,因为约束$(3)$ 的存在,则 $\xi_i \geqslant 0$ ;若$1 - y_i(\boldsymbol{w}^T\boldsymbol{x}i + b) \geqslant 0$ ,则依然为 $ \xi_i \geqslant 1 - y_i(\boldsymbol{w}^T\boldsymbol{x}i + b)$ 。因此$(2),(3)$ 式结合起来: $$ \xi_i \geqslant max(0,, 1 - y_i(\boldsymbol{w}^T\boldsymbol{x}i + b)) = max(0,, 1-y_if(x_i)) $$ 又因为 $(1)$ 式是最小化问题,因此取 $\xi_i$ 的极小值,即令 $\xi_i = max(0,1-yf(x))$ 代入 $(1)$ 式,并令$\lambda = \frac{1}{2C}$ : $$ min; C\sum\limits{i=1}^m max(0,, 1-y_if(x_i)) + \frac12 ||\boldsymbol{w}||^2 \quad {\large \propto} \quad min; \sum\limits{i=1}^m \underbrace{max(0,, 1-y_if(x_i))}{hinge ; loss} + \lambda ||\boldsymbol{w}||^2 $$ 另外能够看到 svm 这个形式的损失函数是自带参数 $\boldsymbol{w}$ 的$L2$ 正则的,而相比之下Logistic Regression的损失函数则没有显式的正则化项,须要另外添加。

<br><br><br>

<font size=4> 四、指数损失(Exponential loss)</font> $$L(y,f(x)) = e^{-yf(x)}$$

<br>

exponential loss为AdaBoost中使用的损失函数,使用exponential loss能比较方便地利用加法模型推导出AdaBoost算法 (<font color=#1E90FF>具体推导过程</font>)。然而其和squared loss同样,对异常点敏感,不够robust。

<br><br><br>

<font size=4> 五、modified Huber loss</font> $$L(y,f(x)) = \left {\begin{matrix} max(0,1-yf(x))^2 \qquad if ;;yf(x)\geq-1 \ \qquad-4yf(x) \qquad\qquad;; if;; yf(x)<-1\end{matrix}\right.\qquad$$

<br>

modified huber loss结合了hinge loss和logistic loss的优势,既能在$yf(x) > 1$时产生稀疏解提升训练效率,又能进行几率估计。另外其对于$(yf(x) < -1)$ 样本的惩罚以线性增长,这意味着受异常点的干扰较少,比较robust。scikit-learn中的SGDClassifier一样实现了modified huber loss。

<br><br>

最后来张全家福:

从上图能够看出上面介绍的这些损失函数均可以看做是0-1损失的单调连续近似函数,而由于这些损失函数一般是凸的连续函数,所以经常使用来代替0-1损失进行优化。它们的相同点是都随着$margin \rightarrow -\infty$而加大惩罚;不一样点在于,logistic loss和hinge loss都是线性增加,而exponential loss是以指数增加。

值得注意的是上图中modified huber loss的走向和exponential loss差很少,并不能看出其robust的属性。其实这和算法时间复杂度同样,成倍放大了以后才能体现出巨大差别:

<br><br><br> /

相关文章
相关标签/搜索