首页 > 解决方案 > sklearn.metrics mean_absolute_error 计算

问题描述

我使用手动 MAE 计算和 sklearn.metrics 得到了不同的结果。为什么?

from sklearn.metrics import mean_absolute_error as MAE

cnt = 0
error = 0
len_y = len(y)
len_y_pred = len(y_pred)
if len_y == len_y_pred:
      for i in range(len_y):
            if y_pred[i] != y.values[i]:
                  cnt += 1
                  error += abs(y.values[i] - y_pred[i])
      print('manual MAE = ', error / cnt)

# MAE from sklearn
print('sklearn MAE = ', MAE(y, y_pred))

输出:

manual MAE =  96189.48047877151
sklearn MAE =  15074.239113119293

为什么如此不同?

谢谢

标签: pythonscikit-learn

解决方案


平均绝对误差是观察/预测长度上的绝对误差之和。即使它们碰巧相同,您也不会从 n 中排除观察。所以修改你的代码:

from sklearn.metrics import mean_absolute_error as MAE
import pandas as pd

y = pd.DataFrame({'values':[3,6,5,8,9,4,2]})
y_pred = [4,8,7,3,2,4,2]

error = 0
for i in range(len_y):
    error += abs(y.values[i] - y_pred[i])

print('manual MAE = ', error / len(y))
print('sklearn MAE = ', MAE(y, y_pred))

manual MAE =  [2.42857143]
sklearn MAE =  2.4285714285714284

推荐阅读