机器学习:损失函数(loss function)
转自http://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))他们的关系就是下图:
损失函数(loss function)是用来估量你模型的预测值f(x)与真实值Y的不一致程度,它是一个非负实值函数,通常使用L(Y, f(x))来表示,损失函数越小,模型的鲁棒性就越好。
demo:
首先我们假设要预测一个公司某商品的销售量:
X:门店数 Y:销量
我们会发现销量随着门店数上升而上升。于是我们就想要知道大概门店和销量的关系是怎么样的呢?
我们根据图上的点描述出一条直线(一元一次方程):
似乎这个直线差不多能说明门店数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,就是没有损失。
(2)平方损失函数(quadraticloss function)
预测值与真实值的差的平方。预测误差越大,损失越大。好理解吧。
(3)绝对损失函数(absoluteloss function)
预测值与真实值的差的绝对值。绝对值不方便计算,一般不常用。
(4)对数损失函数(logarithmicloss function) 或对数似然损失函数(log-likelihood loss function)
对于预测值是概率的情况,取对数损失函数。
因为概率范围[0, 1] 所以对数值是(-∞, 0) ,为了让损失 > 0 所以取对数的负值。上面的公式里面有个负号。看图像,一目了然哈哈:
(5)指数损失函数
(1)对离群点、噪声非常敏感。经常用在AdaBoost算法中。
「其他文章」
- 机器学习:sklearn中xgboost模块的XGBRegressor函数(回归)
- 机器学习:xgboost原生库接口(陈天奇) && xgboost的sklearn接口
- Linux进程管理
- go:连接redis
- go:自定义类型,结构体struct
- go:go mod tidy的作用
- python:判定文件、目录是否存在,以及创建(多层)目录
- python:multiprosessing模块的Pool()类的apply()函数和apply_async()函数的区别
- python:ThreadPoolExecutor线程池和ProcessPoolExecutor进程池
- 时间序列:ARMA
- kafka:介绍
- 机器学习:损失函数(loss function)
- 机器学习:adaboost(回归实战)
- pyenv
- pyspark:集群环境实战
- spark:local模式环境-搭建和使用
- spark:standalone(独立集群环境)--搭建和使用
- spark:yarn集群环境-搭建和使用
- AB测试 - 假设检验的两类错误
- python:多进程的几种实现方式