如何在Python中实现加权均方误差

  • Post category:Python

在Python中实现加权均方误差(Weighted Mean Squared Error,WMSE)需要将预测结果与真实值进行对比,然后求取加权平均值。下面是实现WMSE的完整攻略。

1. 导入必要的库

在Python中进行数值计算常常需要使用NumPy库,因此我们需要先导入NumPy。

import numpy as np

2. 实现WMSE函数

WMSE函数的完整代码如下:

def wmse(pred, true, weights=None):
    '''计算加权均方误差'''
    if weights is None:
        weights = np.ones_like(pred)
    else:
        weights = np.asarray(weights)
    diff = pred - true
    return np.average(diff ** 2, weights=weights)

该函数接受三个参数:

  • pred: 预测值
  • true: 真实值
  • weights: 权重(可选)

当不传入weights时,所有的数据点都被视为同等重要,因此平均误差的计算方式就是所有误差的平方和再除以数据点的数量。如果传入weights,则需要将每个误差乘以相应权重,再计算平均值。

3. 示例说明

我们用两个示例来展示WMSE函数的使用方式。

示例1:

假设有5个样本,它们的真实值和预测值如下:

true = [1.2, 2.3, 3.4, 4.5, 5.6]
pred = [1.0, 2.0, 3.0, 4.0, 5.0]

如果不传入weights,则可以调用wmse函数如下:

mse = wmse(pred, true)
print(mse)

输出结果为:

0.108

这个结果表示所有数据点的平均误差的平方和为0.108。

示例2:

假设我们认为前三个样本的重要性比后两个样本更高,那么可以使用不同的权重,计算加权平均误差。比如,我们可以将前三个样本的权重设为1,后两个样本的权重设为0.5。

weights = [1.0, 1.0, 1.0, 0.5, 0.5]
mse = wmse(pred, true, weights=weights)
print(mse)

输出结果为:

0.0828571

这个结果表示前三个数据点的平均误差的平方和是0.306,后两个数据点的平均误差的平方和是0.042,所以加权平均误差是0.0828571。