用于计算加权均方误差的numpy加权平均值

时间:2017-09-28 20:37:26

标签: python numpy tensorflow scikit-learn

我正在尝试为回归问题计算加权均方误差。我有y_true,y_predicted和y_wts numpy数组。每个阵列的形状为(N,1),其中N是样本数。我不明白为什么以下两段代码会给出不同的答案:

第一个代码段
import numpy as np
sq_error = (y_true-y_predicted)**2
wtd_sq_error = np.multiply(sq_error,y_wts)
wtd_mse = np.mean(wtd_sq_error)
第二个代码段取自sklearn指标mean_squared_error function
wtd_mse_sklearn = np.average((y_true - y_predicted)**2, axis =0,
                               weights=y_wts)

由于张量流加权均方误差和sklearn指标均方误差(指定了权重列)之间的不匹配,我来测试这个。请注意,当我没有指定权重列时,不会发生这种不匹配。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

因为你忘记了体重:

np.mean = sum(error_i * weight_i ∀ i) / len(error_i ∀ i)

,而

np.average = sum(error_i * weight_i ∀ i) / sum(weight_i ∀ i)

答案 1 :(得分:0)

您的第一个代码段中加权平均值的公式是错误的,应该是:

wtd_mse = np.sum(sq_error * y_wts) / np.sum(y_wts)

而不是:

wtd_mse = np.mean(wtd_sq_error)