sklearn.metricsmean_absolute_error计算

zzf*_*ima 3 python scikit-learn

我使用手动 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))
Run Code Online (Sandbox Code Playgroud)

输出:

manual MAE =  96189.48047877151
sklearn MAE =  15074.239113119293
Run Code Online (Sandbox Code Playgroud)

为什么如此不同?

谢谢

Stu*_*olf 6

平均绝对误差是观察/预测长度内的绝对误差之和。即使它们碰巧相同,您也不会从 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
Run Code Online (Sandbox Code Playgroud)