常见回归和分类损失函数比较
本文转自https://www.cnblogs.com/massquantity/p/8964029.html
记录下来,以备时时温故知新
损失函数的一般表示为L(y,f(x))L(y,f(x)) ,用以衡量真实值yy 和预测值f(x)f(x) 之间不一致的程度,一般越小越好。为了便于不同损失函数的比较,常将其表示为单变量的函数,在回归问题中这个变量为y−f(x)y−f(x) ,在分类问题中则为yf(x)yf(x) 。下面分别进行讨论。
回归问题的损失函数
回归问题中yy 和f(x)f(x) 皆为实数∈R∈R ,因此用残差 y−f(x)y−f(x) 来度量二者的不一致程度。残差 (的绝对值) 越大,则损失函数越大,学习出来的模型效果就越差(这里不考虑正则化问题)。
常见的回归损失函数有:
- 平方损失 (squared loss) : (y−f(x))2(y−f(x))2
- 绝对值 (absolute loss) : |y−f(x)||y−f(x)|
- Huber损失 (huber loss) : {12[y−f(x)]2δ|y−f(x)|−12δ2|y−f(x)|≤δ|y−f(x)|>δ{12[y−f(x)]2|y−f(x)|≤δδ|y−f(x)|−12δ2|y−f(x)|>δ
其中最常用的是平方损失,然而其缺点是对于异常点会施以较大的惩罚,因而不够robust。如果有较多异常点,则绝对值损失表现较好,但绝对值损失的缺点是在y−f(x)=0y−f(x)=0 处不连续可导,因而不容易优化。
Huber损失是对二者的综合,当|y−f(x)||y−f(x)| 小于一个事先指定的值δδ 时,变为平方损失,大于δδ 时,则变成类似于绝对值损失,因此也是比较robust的损失函数。三者的图形比较如下:
分类问题的损失函数
对于二分类问题,y∈{−1,+1}y∈{−1,+1} ,损失函数常表示为关于yf(x)yf(x) 的单调递减形式。如下图:
yf(x)yf(x) 被称为margin,其作用类似于回归问题中的残差 y−f(x)y−f(x) 。
二分类问题中的分类规则通常为 sign(f(x))={+1ifyf(x)≥0−1ifyf(x)<0sign(f(x))={+1ifyf(x)≥0−1ifyf(x)<0
可以看到如果 yf(x)>0yf(x)>0 ,则样本分类正确,yf(x)<0yf(x)<0 则分类错误,而相应的分类决策边界即为 f(x)=0f(x)=0 。所以最小化损失函数也可以看作是最大化 margin 的过程,任何合格的分类损失函数都应该对 margin<0 的样本施以较大的惩罚。
1、 0-1损失 (zero-one loss)
L(y,f(x))={0ifyf(x)≥01ifyf(x)<0L(y,f(x))={0ifyf(x)≥01ifyf(x)<0
0-1损失对每个错分类点都施以相同的惩罚,这样那些“错的离谱“ (即 margin→−∞margin→−∞ )的点并不会收到大的关注,这在直觉上不是很合适。另外0-1损失不连续、非凸,优化困难,因而常使用其他的代理损失函数进行优化。
2、Logistic loss
L(y,f(x))=log(1+e−yf(x))L(y,f(x))=log(1+e−yf(x))
logistic Loss为Logistic Regression中使用的损失函数,下面做一下简单证明:
Logistic Regression中使用了Sigmoid函数表示预测概率:
g(f(x))=P(y=1|x)=11+e−f(x)g(f(x))=P(y=1|x)=11+e−f(x)
而
P(y=−1|x)=1−P(y=1|x)=1−11+e−f(x)=11+ef(x)=g(−f(x))P(y=−1|x)=1−P(y=1|x)=1−11+e−f(x)=11+ef(x)=g(−f(x))
因此利用y∈{−1,+1}y∈{−1,+1} ,可写为P(y|x)=11+e−yf(x)P(y|x)=11+e−yf(x) ,此为一个概率模型,利用极大似然的思想:
max(∏i=1mP(yi|xi))=max(∏i=1m11+e−yif(xi))max(∏i=1mP(yi|xi))=max(∏i=1m11+e−yif(xi))
两边取对数,又因为是求损失函数,则将极大转为极小:
max(∑i=1mlogP(yi|xi))=−min(∑i=1mlog(11+e−yif(xi)))=min(∑i=1mlog(1+e−yif(xi))max(∑i=1mlogP(yi|xi))=−min(∑i=1mlog(11+e−yif(xi)))=min(∑i=1mlog(1+e−yif(xi))
这样就得到了logistic loss。
如果定义t=y+12∈{0,1}t=y+12∈{0,1} ,则极大似然法可写为:
∏i=1m(P(ti=1|xi))ti((1−P(ti=1|x))1−ti∏i=1m(P(ti=1|xi))ti((1−P(ti=1|x))1−ti
取对数并转为极小得:
∑i=1m{−tilogP(ti=1|xi)−(1−ti)log(1−P(ti=1|xi))}∑i=1m{−tilogP(ti=1|xi)−(1−ti)log(1−P(ti=1|xi))}
上式被称为交叉熵损失 (cross entropy loss),可以看到在二分类问题中logistic loss和交叉熵损失是等价的,二者区别只是标签y的定义不同。
3、Hinge loss
L(y,f(x))=max(0,1−yf(x))L(y,f(x))=max(0,1−yf(x))
hinge loss为svm中使用的损失函数,hinge loss使得yf(x)>1yf(x)>1 的样本损失皆为0,由此带来了稀疏解,使得svm仅通过少量的支持向量就能确定最终超平面。
hinge loss被翻译为“合页损失”,那么合页究竟长啥样?如图,确实有点像hinge loss的形状:
来看下 hinge loss 是如何推导出来的,带软间隔的svm最后的优化问题可表示为:
minw,b,ξ12||w||2+C∑i=1mξis.t.yi(wTxi+b)⩾1−ξiξi⩾0,i=1,2,...,m(1)(2)(3)(1)minw,b,ξ12||w||2+C∑i=1mξi(2)s.t.yi(wTxi+b)⩾1−ξi(3)ξi⩾0,i=1,2,...,m
(2)(2) 式重新整理为 ξi⩾1−yi(wTxi+b)ξi⩾1−yi(wTxi+b) 。若 1−yi(wTxi+b)<01−yi(wTxi+b)<0 ,由于约束(3)(3) 的存在,则 ξi⩾0ξi⩾0 ;若1−yi(wTxi+b)⩾01−yi(wTxi+b)⩾0 ,则依然为 ξi⩾1−yi(wTxi+b)ξi⩾1−yi(wTxi+b) 。所以(2),(3)(2),(3) 式结合起来:
ξi⩾max(0,1−yi(wTxi+b))=max(0,1−yif(xi))ξi⩾max(0,1−yi(wTxi+b))=max(0,1−yif(xi))
又由于 (1)(1) 式是最小化问题,所以取 ξiξi 的极小值,即令 ξi=max(0,1−yf(x))ξi=max(0,1−yf(x)) 代入 (1)(1) 式,并令λ=12Cλ=12C :
minC∑i=1mmax(0,1−yif(xi))+12||w||2∝min∑i=1mmax(0,1−yif(xi))hingeloss+λ||w||2minC∑i=1mmax(0,1−yif(xi))+12||w||2∝min∑i=1mmax(0,1−yif(xi))⏟hingeloss+λ||w||2
另外可以看到 svm 这个形式的损失函数是自带参数 ww 的L2L2 正则的,而相比之下Logistic Regression的损失函数则没有显式的正则化项,需要另外添加。
4、指数损失(Exponential loss)
L(y,f(x))=e−yf(x)L(y,f(x))=e−yf(x)
exponential loss为AdaBoost中使用的损失函数,使用exponential loss能比较方便地利用加法模型推导出AdaBoost算法 (具体推导过程)。然而其和squared loss一样,对异常点敏感,不够robust。
5、modified Huber loss
L(y,f(x))={max(0,1−yf(x))2ifyf(x)≥−1−4yf(x)ifyf(x)<−1L(y,f(x))={max(0,1−yf(x))2ifyf(x)≥−1−4yf(x)ifyf(x)<−1
modified huber loss结合了hinge loss和logistic loss的优点,既能在yf(x)>1yf(x)>1 时产生稀疏解提高训练效率,又能进行概率估计。另外其对于(yf(x)<−1)(yf(x)<−1) 样本的惩罚以线性增加,这意味着受异常点的干扰较少,比较robust。scikit-learn中的SGDClassifier同样实现了modified huber loss。
最后来张全家福:
从上图可以看出上面介绍的这些损失函数都可以看作是0-1损失的单调连续近似函数,而因为这些损失函数通常是凸的连续函数,因此常用来代替0-1损失进行优化。它们的相同点是都随着margin→−∞margin→−∞ 而加大惩罚;不同点在于,logistic loss和hinge loss都是线性增长,而exponential loss是以指数增长。
值得注意的是上图中modified huber loss的走向和exponential loss差不多,并不能看出其robust的属性。其实这和算法时间复杂度一样,成倍放大了之后才能体现出巨大差异: