【基础回顾】在回归任务中常见的损失函数比较(mse、mae、huber)

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 【基础回顾】在回归任务中常见的损失函数比较(mse、mae、huber)

前言

  在机器学习中的回归任务算法模型中我们常常会碰到求解目标的最大值或最小值,在最小化的场景下,目标函数又称为损失函数。在实操中我们在选择损失函数往往会考虑该函数是否能够完美适配当前的任务,比如是否会出现异常值等。本文在这里为大家带来的是回归任务中具有代表性的3个损失函数

函数简介

1. L1 loss

L1 loss:为平均绝对误差。是指预测值和真实值之间的距离的平均值。

优点: 对异常值具有较好的鲁棒性

缺点: 对于很小的损失,梯度也会很大,不利于模型的收敛

2. L2 loss

L2 loss:为均方根误差。是指模型预测值与真实样本之间的差值平方

优点: 计算方便,衡量误差较为准确;梯度随着误差的增大而减小,收敛效果好。

缺点: 对离群的点比较敏感,受影响较大。

3.HUBER loss

HUBER loss : 整合了MAE&MSE各自的优点,同时避免了其缺点

优点: 对异常值的检测更具鲁棒性;在最优点附近由于调整为MSE,有助于函数收敛

缺点: 需要额外的引入超参,需要调试;临界点delta处不可导

函数实操

  模拟数据的输入与输出,输入采用生成随机数的方式生成,输出为输入的0.8到1.2之间随机数的乘积;损失函数我们选择torch.nn自带的损失函数模块。这样我们便完成了输入、输出和损失函数。

结果图像

1. MSE

image.png

2. MAE

image.png

3. HUBER

image.png

附录源码

ini

复制代码

import random
import matplotlib.pyplot as p
import torch
# 选择损失函数MSE
loss_mse = torch.nn.MSELoss()
loss_mae = torch.nn.L1Loss()
loss_huber = torch.nn.SmoothL1Loss()
def MakeDatas():
    targets_list = []
    inputs_list = []
    x = []
    for i in range(100):
        inputs = random.uniform(1, 100)
        targets = inputs * random.uniform(0.8, 1.2)
        inputs, targets = torch.tensor(inputs), torch.tensor(targets)
        x.append(i)
        inputs_list.append(inputs)
        targets_list.append(targets)
    return x, inputs_list, targets_list
if __name__ == "__main__":
    x, inputs_list, targets_list = MakeDatas()
    mseList = []
    maeList = []
    huberList = []
    for j in range(100):
        mse = loss_mse(inputs_list[j], targets_list[j])
        mae = loss_mae(inputs_list[j], targets_list[j])
        huber = loss_huber(inputs_list[j], targets_list[j])
        mseList.append(mse)
        maeList.append(mae)
        huberList.append(huber)
    p.figure(1)
    p.plot(x, inputs_list, label="inputs", color='red')
    p.plot(x, targets_list, label="targets", color='green')
    p.plot(x, mseList, label="loss", color='blue')
    p.title('mse')
    p.legend()
    p.show()
    p.figure(2)
    p.plot(x, inputs_list, label="inputs", color='red')
    p.plot(x, targets_list, label="targets", color='green')
    p.plot(x, maeList, label="loss", color='blue')
    p.title('mae')
    p.legend()
    p.show()
    p.figure(3)
    p.plot(x, inputs_list, label="inputs", color='red')
    p.plot(x, targets_list, label="targets", color='green')
    p.plot(x, huberList, label="loss", color='blue')
    p.title('huber')
    p.legend()
    p.show()

结尾

  本次实验较为草率,如有不到之处,还望大佬们批评指正


相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
机器学习/深度学习 文字识别 算法
深度学习基础5:交叉熵损失函数、MSE、CTC损失适用于字识别语音等序列问题、Balanced L1 Loss适用于目标检测
深度学习基础5:交叉熵损失函数、MSE、CTC损失适用于字识别语音等序列问题、Balanced L1 Loss适用于目标检测
|
机器学习/深度学习
【机器学习技巧】回归模型的几个常用评估指标(R2、Adjusted-R2、MSE、RMSE、MAE、MAPE)及其在sklearn中的调用方式
【机器学习技巧】回归模型的几个常用评估指标(R2、Adjusted-R2、MSE、RMSE、MAE、MAPE)及其在sklearn中的调用方式
【机器学习技巧】回归模型的几个常用评估指标(R2、Adjusted-R2、MSE、RMSE、MAE、MAPE)及其在sklearn中的调用方式
|
15天前
|
监控 负载均衡 Cloud Native
ZooKeeper分布式协调服务详解:面试经验与必备知识点解析
【4月更文挑战第9天】本文深入剖析ZooKeeper分布式协调服务原理,涵盖核心概念如Server、Client、ZNode、ACL、Watcher,以及ZAB协议在一致性、会话管理、Leader选举中的作用。讨论ZooKeeper数据模型、操作、会话管理、集群部署与管理、性能调优和监控。同时,文章探讨了ZooKeeper在分布式锁、队列、服务注册与发现等场景的应用,并在面试方面分析了与其它服务的区别、实战挑战及解决方案。附带Java客户端实现分布式锁的代码示例,助力提升面试表现。
30 2
|
3月前
|
消息中间件 Java 网络安全
JAVAEE分布式技术之Zookeeper的第一次课
JAVAEE分布式技术之Zookeeper的第一次课
70 0
|
1月前
|
监控 NoSQL Java
Zookeeper分布式锁
Zookeeper分布式锁
90 1
|
3月前
|
监控 Dubbo Java
深入理解Zookeeper系列-2.Zookeeper基本使用和分布式锁原理
深入理解Zookeeper系列-2.Zookeeper基本使用和分布式锁原理
61 0
|
3月前
|
NoSQL 中间件 API
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)(下)
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)
82 2
|
3月前
|
NoSQL Java API
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)(上)
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)
74 0
|
2月前
|
Java Linux Spring
Zookeeper实现分布式服务配置中心
Zookeeper实现分布式服务配置中心
48 0
|
2月前
|
存储 分布式计算 Hadoop
ZooKeeper初探:分布式世界的守护者
ZooKeeper初探:分布式世界的守护者
64 0