机器学习案例系列教程——损失函数总结

注意区分样本损失,和样本集的损失

在本文,我们要注意区分,一个样本的损失值为

loss(y,f(x))

而多个样本的损失值为
1ni=1nloss(y,f(x))

所说义如果我们说一个算法的损失函数,都是针对一个样本的。只不过有些文章把所有样本的损失平均也说成是算法的函数函数。要注意区分。

损失函数 |yif(xi)|,一般是针对单个样本 i
代价函数 1/N.i=1N|yif(xi)| , 一般是针对总体
目标函数 1/N.i=1N|yif(xi)| + 正则化项

经验风险最小化可表示为最优化问题:

min1Ni=1NL(yi,f(xi))

而结构风险最小化可表示为最优化问题:
min1Ni=1NL(yi,f(xi))+λJ(f)

在结构风险最小化中,经验风险只是被优化的一部分,此时并不能称经验风险最小化。

0-1损失函数

L(Y,f(X))={1,Yf(X)0,Y=f(X)

可以看出,该损失函数的意义就是,当预测错误时,损失函数值为1,预测正确时,损失函数值为0。该损失函数不考虑预测值和真实值的误差程度,也就是只要预测错误,预测错误差一点和差很多是一样的。

对数损失函数(logarithmic loss function)

L(Y,P(Y|X))=logP(Y|X)

这个损失函数就比较难理解了。事实上,该损失函数用到了极大似然估计的思想。P(Y|X)通俗的解释就是:在当前模型的基础上,对于样本X,其预测值为Y,也就是预测正确的概率。由于概率之间的同时满足需要使用乘法,但是乘法直接求导比较困难,所以需要将其转化为加法,我们将其取对数。最后由于是损失函数,所以预测正确的概率越高,其损失值应该是越小,因此再加个负号取个反。

逻辑回归中使用对数损失函数,最后得到的损失函数如下:

J(w,b)=1mD(yi,pi)

其中D(y,p)=ylog(p)+(1y)(1log(p))公式中的p为逻辑回归预测的概率值。p=h(w,b)=sigmoid(wx+b)

所以损失函数等价于

J(w,b)=1mi=1m[y(i)logy^(i)+(1y(i))log(1y^(i))]

其中yi{0,1}表示正样本的概率。

对于softmax多分类,类标号要进行one-hot编码,转变为多输出问题。所有一个样本的预测输出的值为向量。例如3分类问题,一个样本的输出值为[p1,p2,p3],损失函数为

L(Y,f(x))=j=1nYjlogpj
其中n为输出维度,也就是有多少种分类,pj为预测的属于每种分类的概率。可以看出softmax损失函数是逻辑回归损失函数的一种推广。当n取2时,损失函数值就是逻辑回归的损失函数。

平方损失函数(最小二乘法, Ordinary Least Squares )

L(Y,f(X))=(Yf(X))2

该损失函数的意义也很简单,就是取预测差距的平方。

最小二乘法是线性回归的一种,OLS将问题转化成了一个凸优化问题。在线性回归中,它假设样本和噪声都服从高斯分布。最后通过极大似然估计(MLE)可以推导出最小二乘式子。最小二乘的基本原则是:最优拟合直线应该是使各点到回归直线的距离和最小的直线,即平方和最小。

绝对值损失函数(absolute loss function)

L(Y,f(X))=|Yf(X)|

该损失函数的意义和上面差不多,只不过是取了绝对值而不是求绝对值,差距不会被平方放大。

指数损失函数

L(y,f(x))=exp[yf(x)]

指数损失函数是0,1损失函数的变形
Adaboost的目标函数就是指数损失,在给定n个样本的情况下,Adaboost的损失函数为
L(y,f(x))=1ni=1nexp[yif(xi)]

其中yi{1,1}表示对应的标签值

Hinge损失函数(SVM)

minL(w)=1ni=1nH(yif(xi,w)),whereH(t)={t+1t<10t1

其含义为,y的值在-1到1之间就可以了,并不鼓励,即并不鼓励分类器过度自信,让某个可以正确分类的样本距离分割线的距离超过1并不会有任何奖励。从而使得分类器可以更专注整体的分类误差

优点:稳定的分类面,凸函数。对分对的但又不是很对的样本也进行惩罚(0-1之间),可以极大化分类间隔。

感知机损失函数(L1 margin cost)

minL(w)=1ni=1nH(yif(xi,w)),whereH(t)={tt<00t0

在t=0处不连续,所以不可导,但是可以求次梯度(导数)。

这里写图片描述
优点:稳定的分类面,次梯度可导

缺点:二阶不可导,有时候不存在唯一解

决策树损失函数:

设决策树的叶子节点集合为T,t是T中的一个元素,该叶节点有Nt个样本,其中k类的样本有Ntk个,共K个分类

Ht(T)=k=1KNtkNtlogNtkNt

则损失函数可以定义为

Cα(T)=t=1TNtHt(T)+αT

右边第一项表示误差大小,第二项表示模型的复杂度,也就是用叶节点数目表示,防止过拟化。(一般的损失函数都用两项来表示,误差和模型复杂度)

对每个叶节点t来说,Ht(T)表示t的熵(也就是不确定性)的期望,针对的是t叶子节点中每个数据实例的熵的期望,t叶子节点中有Nt个实例,那么t叶子节点总的熵(不确定性)就是NtHt(T),整个树有∣T∣个叶节点,加起来就是整棵树的熵(不确定性,也可以理解成误差)。

L1和L2正则化

这里写图片描述

L1正则化假设了模型的先验概率分布服从拉普拉斯分布;L2正则化假设了模型的先验概率分布服从高斯分布。

没有更多推荐了,返回首页