机器学习:损失函数(loss function)

语言: CN / TW / HK
转自https://blog.csdn.net/qq_24753293/article/details/78788844,感谢大佬分享

L(Y,f(x))
L代表loss function
Y是真实值
f(x)是模型预测出来的值

前言

说到机器学习,初学者听到最多的就是 `损失函数` 了吧 
我对这个词也是一头雾水 好像今天一个定义明天又是一个定义,读了大量的文章和博客终于有点起色

该文章根据自己的理解,通过简单的语言,大致说下什么是损失函数。
首先我们需要了解损失函数的定义是什么:衡量机器学习模型预测效果好坏的一种表法方式。

可能这么说有点小小的抽象,那么再解释下:损失函数就是用来表现预测与实际数据的差距程度
比如你做一个线性回归,你的预测值和实际值之间会有误差,那么我们找到一个函数表达这个误差就是损失函数。

机器学习模型关于单个样本的预测值与真实值的差称为损失。
损失越小,模型越好,如果预测值与真实值相等,就是没有损失。
用于计算损失的函数称为损失函数。模型每一次预测的好坏用损失函数来度量。

损失函数是一个动态的值(极限是0),我们通过不断的迭代,优化模型,使得损失函数越来越小。

关于损失,有很多种计算方式:
   绝对值损失函数
   平方损失函数
   指数损失函数
   对数损失函数

分类算法的损失函数一般是:
   0-1损失函数
   指数损失函数
   对数损失函数


回归算法的一般损失函数:
   均方损失函数
   绝对值损失函数
   平方损失函数

demo

举个小例子:
   比如你是一个厨师大赛评委,几名厨师最后成绩由你确定。
   在你认为色,香,味的满分都是100分。

   每位厨师都有自己的做菜方案和技巧,并且达到的效果也是不同的(这个就相当于预测值),
   最后用你的一套规则判断他们多少分(你就是损失函数)

假设我们令真实值为Y  预测值为f(x) 损失函数为L(Y,f(x))他们的关系就是下图:

image.png

损失函数(loss function)是用来估量你模型的预测值f(x)与真实值Y的不一致程度,它是一个非负实值函数,通常使用L(Y, f(x))来表示,损失函数越小,模型的鲁棒性就越好。


demo:
首先我们假设要预测一个公司某商品的销售量:

image.png

X:门店数     Y:销量
我们会发现销量随着门店数上升而上升。于是我们就想要知道大概门店和销量的关系是怎么样的呢?
我们根据图上的点描述出一条直线(一元一次方程):

image.png

似乎这个直线差不多能说明门店数X和Y得关系了:
我们假设直线的方程为Y=a0+a1X(a为常数系数,一元一次方程)。
假如我们第一次拟合出来的回归曲线是:Y=3X+10
然后得到预测值与真实值之间的误差情况如下所示:

我们会想到用绝对损失函数表表示我们拟合出来的Y=3x+10这个方程的好坏。
根据上面的数据,我们计算求得绝对损失函数是6
但是,我们一般用平方损失函数来代替绝对损失函数:上面的案例,我们计算得到平方损失函数是10

假设我们又拟合出来一条直线 Y= 4x+8

绝对损失函数求和:11  平方损失函数求和:27
根据这2次的拟合方程,从损失函数求和中,就能评估出第一次拟合能够更好得预测门店销售。

总结

常用的损失函数有以下几种:
(1)0-1损失函数(0-1 lossfunction):
   二类分类任务中,预测值与真实值不同,就是预测错误,则损失是1;
   预测值与真实值相等,就是预测正确,损失是 0,就是没有损失。

image.png

(2)平方损失函数(quadraticloss function)
   预测值与真实值的差的平方。预测误差越大,损失越大。好理解吧。

image.png

(3)绝对损失函数(absoluteloss function)
   预测值与真实值的差的绝对值。绝对值不方便计算,一般不常用。

image.png

(4)对数损失函数(logarithmicloss function) 或对数似然损失函数(log-likelihood loss function)
   对于预测值是概率的情况,取对数损失函数。
   因为概率范围[0, 1] 所以对数值是(-∞, 0) ,为了让损失 > 0 所以取对数的负值。上面的公式里面有个负号。看图像,一目了然哈哈:

image.png

image.png

(5)指数损失函数
(1)对离群点、噪声非常敏感。经常用在AdaBoost算法中。