机器学习之损失函数&评估函数

分类损失函数

交叉熵损失函数

与均方误差损失相比,交叉熵损失学习的速度较快。

CE=1mi=1mj=1cyj(i)logyj^(i)CE=-\frac{1}{m} \sum_{i=1}^{m} \sum_{j=1}^{c} y_{j}^{(i)} \log{ \hat{y_{j}}^{(i)}}

yj(i)y_{j}^{(i)}表示第i个样本在第j类上真实的输出,只有准确的类别输出为1,其他类别输出为0。yj^(i)\hat{y_{j}}^{(i)}表示第i个样本属于第j类的预测概率。当然yj(i)y_{j}^{(i)}是可以被省略的。如下

CE=1mi=1mlogyj^(i)CE=-\frac{1}{m} \sum_{i=1}^{m} \log{ \hat{y_{j}}^{(i)}}

所以交叉熵损失也被称为负对数拟然损失。之所以交叉熵函数学习的快,是因为当模型错误较大的时候,就是对正确类别预测结果偏小,负对数的值会非常大;而当模型错误率较小的时候,正确类别预测较大,负对数趋近于0.这样的变化是呈指数形的,所以当模型错误率较大的时候,损失函数的梯度较大,因此模型学的更快。

对数损失

对数损失是对预测概率的似然估计,标准形式如下

logloss=log P(YX)logloss=-log\ P(Y|X)

对数损失最小化的本质是利用样本的已知分布,求解导致这种分布的最佳模型参数,使得这种分布出现的概率最大。它的二分类形式为

对数损失最小化本质上是利用样本中的 已知分布 ,求解导致这种分布的最佳模型参数,使这种分布出现概率最大 。

logloss=1Ni=1N(ylogpi+(1y)logpi)logloss=-\frac{1}{N} \sum_{i=1}^{N} (y*log^{p_{i}}+(1-y)*log^{p_{i}})

logloss衡量的是预测概率分布和真实概率分布的差异,取值越小越好。与AUC不同,logloss对预测概率更加敏感。AUC是对预测的顺序是更加敏感的。

回归模型指标

上文中主要介绍了分类模型的评估体系,接下来来讲一下回归模型的评估标准。

平均绝对误差(MAE)

MAE=1Ni=1NyipiMAE=\frac{1}{N} \sum_{i=1}^{N} |y_{i}-p_{i}|

y表示真实值,p表示预测值。mae能够很好的刻画出预测值和真实值的偏差。模型使用mae作为损失函数本质是对数据分布的中位数进行拟合。这里补充一下例如xgboost就不能使用mae直接优化,因为它没有二阶导数,但是你发现似乎你指定这样的损失也可以,其实xgb对mae做了特殊的处理。

加权平均绝对误差(WMAE)

WMAE是基于MAE的变种评估指标,对对每条样本考虑不同的权重,比如考虑时间因素,离当前时间越久的样本权重越低。

WMAE=1Ni=1NwiyipiWMAE=\frac{1}{N} \sum_{i=1}^{N} w_{i} |y_{i}-p_{i}|

w就是第i条样本的权重

平均绝对百分误差(MAPE)

MAPE=100Ni=1NyipiyiMAPE=\frac{100}{N} \sum_{i=1}^{N} |\frac{y_{i}-p_{i}}{y_{i}}|

MAPE通过计算绝对误差百分比表示预测效果,取值越小越好。如果MAPE=10,表示预测平均偏离真实值10%,MAPE的缺点是y=0的时候无定义,并且如果y接近于0,MAPE大于100%。 MAPE对负值误差的惩罚大于真值误差(-p,分子变大)。基于这样的问题有一些指标被提出,MASE、MDA等。

有趣的问题

如果优化模型的时候,发现mae变小,但是mape却变大,说明什么问题呢?
解:当一个机器学习模型的MAE低,但MAPE却升高时,通常表示模型在预测值较低的数据点上表现较好,但在预测值较高的数据点上表现较差。

上面的问题如果反过来呢? mae变大,但是mape却变小啦?

  1. 如果数据的变化幅度不同,这可能导致MAE升高,但MAPE降低。
  2. 如果数据集中存在极端值或异常值,这些值可能会对MAE产生较大影响,导致MAE升高。但是,MAPE在计算相对误差时会将这些异常值的影响抑制得更好,因此可能会降低。

MAE和MAPE都是评估模型性能的指标,但它们分别关注绝对误差和相对误差,因此在解释它们的结果时需要综合考虑。此外,对于不同的问题和应用场景,适用的评估指标也可能不同。

均方误差(RMSE)

RMSE=1Ni=1N(yipi)2RMSE=\sqrt{\frac{1}{N} \sum_{i=1}^{N} (y_{i}-p_{i})^{2}}

与MAE相比,RMSE对大误差样本有更大的惩罚,但是它对离群点有点敏感,因为它的计算是先求平方再求均值,然后再开方。健壮性不如MAE。模型使用RMSE作为损失函数是对数据分布平均值进行拟合。

数据存在许多异常值时使用MAE,因为当数据异常时,RMSE是先对误差进行平方的累加后再开方,它其实是放大了较大误差之间的差距。
于此类似的MSE

MSE=1Ni=1N(yipi)2MSE=\frac{1}{N} \sum_{i=1}^{N} (y_{i}-p_{i})^{2}

均方根对数误差(RMSLE)

RMSLE=1Ni=1N(log(yi+1)log(pi+1)2RMSLE=\sqrt{\frac{1}{N} \sum_{i=1}^{N} (log(y_{i}+1)-log(p_{i}+1)^{2}}

RMSLE对预测值偏小的样本惩罚比预测值偏大的样本惩罚大,比如一个酒店消费均价是200元,预测成150元的惩罚会比预测成250元的大。如果评估指标选用RMSLE, 没办法直接优 化RMSLE但是能直接优化RMSE的模型,通常会先对预测目标进行对数变换ynew=log(y+1)y_{new}=log(y+1),最后预测值再还原p=exp pnew1p=exp\ p_{new} - 1

评估函数

这一节咱们通过评估的视角看ME类损失函数的性能,MAE是衡量每个真实值和预测值的误差,反应的是预测值和真实值的整体差距,大多数情况下能给出一个模型的整体效果的,但是无法刻画出模型的有偏性。如一个预测值偏高的模型和一个预测值偏低的模型效果可能是一样的。而且如果有明显的异常值也是对结果干扰比较大。
所以就引入和MSE的概念,这样能够放大异常值的影响,但是存在一个量纲的问题,因为损失函数是一个平方的形式,结合具体业务的时候就十分难。所以进一步衍生了RMSE等指标。

R2R^{2}指标

这里主要重点介绍的是R2R^{2},计算公式如下。

R2=1i=1n(ytruey^)2i=1n(ymeany^)2R^{2}=1-\frac{\sum_{i=1}^{n} (y_{true}-\hat{y})^{2}}{\sum_{i=1}^{n}(y_{mean}-\hat{y})^{2}}

y^\hat{y}表示预测值,ymeany_{mean}表示平均值,这里指的是整个样本的均值,所以R方的原理就是寻找一个参照物作为量纲,这样就能拍出数据集的量纲影响,又能刻画模型的性能。当然R方的值是有物理含义的。
R2=1R^{2}=1表示完美模型。
R2=0R^{2}=0表示和使用均值直接进行预测没有本质差别。
R2<0R^{2}<0表示还不如直接使用均值进行预测呢。

总而言之

这里有个比较有趣的问题,用回归的损失函数可以做分类的损失吗? 不知道大家有没有思考过,其实这个问题是这样的,我们看MAE和MASE等等指标它们的一阶导数是不是十分的“平”,也就是梯度不明显,这种函数拿来做梯度下降肯定是不太行的。所以交叉熵一般是分类问题的最爱。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×