在 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])
需要在交叉验证中使用 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])