基本信息
文件名称:十个常用的损失函数解释以及Python代码实现.docx
文件大小:19.45 KB
总页数:9 页
更新时间:2025-05-30
总字数:约5.2千字
文档摘要

十个常用的损失函数解释以及Python代码实现

什么是损失函数?

损失函数是一种衡量模型与数据吻合程度的算法。损失函数测量实际测量值和预测值之间差距的一种方式。损失函数的值越高预测就越错误,损失函数值越低则预测越接近真实值。对每个单独的观测(数据点)计算损失函数。将所有损失函数(lossfunction)的值取平均值的函数称为代价函数(costfunction),更简单的理解就是损失函数是针对单个样本的,而代价函数是针对所有样本的。

损失函数与度量指标

一些损失函数也可以被用作评价指标。但是损失函数和度量指标(metrics)有不同的目的。虽然度量指标用于评估最终模型并比较不同模型的性能,但损失函数在模型构建阶段用作正在创建的模型的优化器。损失函数指导模型如何最小化误差。

也就是说损失函数是知道模型如何训练的,而度量指标是说明模型的表现的。

为什么要用损失函数

由于损失函数测量的是预测值和实际值之间的差距,因此在训练模型时可以使用它们来指导模型的改进(通常的梯度下降法)。在构建模型的过程中,如果特征的权重发生了变化得到了更好或更差的预测,就需要利用损失函数来判断模型中特征的权重是否需要改变,以及改变的方向。

我们可以在机器学习中使用各种各样的损失函数,这取决于我们试图解决的问题的类型、数据质量和分布以及我们使用的算法,下图为我们整理的10个常见的损失函数:

1、均方误差(MSE)

均方误差是指所有预测值和真实值之间的平方差,并将其平均值。常用于回归问题。

defMSE(y,y_predicted):sq_error=(y_predicted-y)**2sum_sq_error=np.sum(sq_error)mse=sum_sq_error/y.sizereturnmse

2、平均绝对误差(MAE)

作为预测值和真实值之间的绝对差的平均值来计算的。当数据有异常值时,这是比均方误差更好的测量方法。

defMAE(y,y_predicted):error=y_predicted-yabsolute_error=np.absolute(error)total_absolute_error=np.sum(absolute_error)mae=total_absolute_error/y.sizereturnmae

3、均方根误差(RMSE)

这个损失函数是均方误差的平方根。如果我们不想惩罚更大的错误,这是一个理想的方法。

defRMSE(y,y_predicted):sq_error=(y_predicted-y)**2total_sq_error=np.sum(sq_error)mse=total_sq_error/y.sizermse=math.sqrt(mse)returnrmse

4、平均偏差误差(MBE)

类似于平均绝对误差但不求绝对值。这个损失函数的缺点是负误差和正误差可以相互抵消,所以当研究人员知道误差只有一个方向时,应用它会更好。

defMBE(y,y_predicted):error=y_predicted-ytotal_error=np.sum(error)mbe=total_error/y.sizereturnmbe

5、Huber损失

Huber损失函数结合了平均绝对误差(MAE)和均方误差(MSE)的优点。这是因为Hubber损失是一个有两个分支的函数。一个分支应用于符合期望值的MAE,另一个分支应用于异常值。HubberLoss一般函数为:

这里的

defhubber_loss(y,y_predicted,delta)delta=1.35*MAEy_size=y.sizetotal_error=0foriinrange(y_size):erro=np.absolute(y_predicted[i]-y[i])iferrordelta:hubber_error=(error*error)/2else:hubber_error=(delta*error)/(0.5*(delta*delta))total_error+=hubber_errortotal_hubber_error=total_error/y.sizereturntotal_hubber_error

6、最大似然损失(LikelihoodLoss/LHL)

该损失函数主要用于二值分类问题。将每一个预测值