牛客题解 | 损失函数

题目

题目链接

  1. 均方误差(MSE):用于回归问题,计算预测值与真实值之间的平方差的平均值。MSE对较大的误差更加敏感,因此适合于需要惩罚大误差的场景。
    MSE = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 \text{MSE} = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 MSE=n1i=1n(yiy^i)2
  2. 平均绝对误差(MAE):同样用于回归问题,计算预测值与真实值之间的绝对差的平均值。MAE对异常值的敏感性较低,适合于对所有误差一视同仁的情况。
    MAE = 1 n ∑ i = 1 n ∣ y i − y ^ i ∣ \text{MAE} = \frac{1}{n} \sum_{i=1}^{n} |y_i - \hat{y}_i| MAE=n1i=1nyiy^i
  3. Huber损失:结合了MSE和MAE的优点,当误差小于某个阈值时使用MSE,超过该阈值时使用MAE。这使得Huber损失在处理异常值时更加灵活。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 余弦损失:用于向量比较,计算真实值与预测值之间的余弦相似度损失。适合于文本分类和推荐系统等需要比较向量相似度的场景。
    Cosine Loss = 1 − y ⋅ y ^ ∣ ∣ y ∣ ∣ ⋅ ∣ ∣ y ^ ∣ ∣ \text{Cosine Loss} = 1 - \frac{y \cdot \hat{y}}{||y|| \cdot ||\hat{y}||} Cosine Loss=1∣∣y∣∣∣∣y^∣∣yy^

标准代码

import numpy as np
def calculate_loss(real_values, predicted_values,delta):
    mse = np.mean((real_values - predicted_values) ** 2)
    mae = np.mean(np.abs(real_values - predicted_values))
    huber_loss = np.where(np.abs(real_values - predicted_values) <= delta, mse, mae)
    cosine_loss = 1 - np.dot(real_values, predicted_values) / (np.linalg.norm(real_values) * np.linalg.norm(predicted_values))
    return round(mse, 6), round(mae, 6), round(np.mean(huber_loss), 6), round(cosine_loss, 6)
    

# 从标准输入读取数据
n = int(input())
real_values = []
predicted_values = []

for _ in range(n):
    real, predicted = map(float, input().split())
    real_values.append(real)
    predicted_values.append(predicted)

delta = float(input())  # 读取阈值

# 调用计算损失函数的函数
results = calculate_loss(np.array(real_values), np.array(predicted_values), delta)
# 输出结果
for value in results:
    print(f"{value:.6f}")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值