在 k 折交叉验证 sklearn 中使用 MAPE

Using MAPE in k fold cross validation sklearn

需要在交叉验证中使用 MAPE 而不是 R2,只是想知道是否有任何简单的等价物

score = cross_val_score(reg, X, y, scoring='neg_mean_absolute_percentage_error', cv=kfold)

我看到 sklearn 将 MAPE 列为评分方法 here 但是当我尝试执行上述代码时出现此错误

'neg_mean_absolute_percentage_error' is not a valid scoring value

(编辑:为 NMAPE 而不是 NMAE 编辑)

您可以在自定义函数上使用 sklearn.metrics.make_scorer 来获得您需要的东西。下面是一些帮助代码。

NMAPE的定义是根据this post中的公式定义的。它只是下面等式的负数 -

import numpy as np
from sklearn.metrics import make_scorer
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import cross_val_score

#define custom function which returns single output as metric score
def NMAPE(y_true, y_pred): 
    return 1 - np.mean(np.abs((y_true - y_pred) / y_true)) * 100

#make scorer from custome function
nmape_scorer = make_scorer(NMAPE)

#dummy data
X = np.random.random((1000,10))
y = np.random.random(1000,)

#cross validation score on model
reg = LinearRegression()
cross_val_score(reg, X, y, scoring=nmape_scorer, cv=5)
array([-4453.67565485,  -148.201211  ,  -222.92820259,  -185.27855064,
        -657.27927049])