首页 > 解决方案 > 有没有办法在 sklearn 上使用 MAPE(平均百分比误差)和 cross_validate?

问题描述

我正在尝试使用回归模型来训练和预测多输出数据集(即预测多个目标列)。

sklearn 文档中的此列表中没有 MAPE 的记分员: https ://scikit-learn.org/stable/modules/model_evaluation.html

我知道,您可以单独使用 sklearn.metrics.mean_absolute_percentage_error 计算 MAPE。但是有没有办法将它与 cross_validate() 结合起来?我愿意使用 cross_val_score 或其他交叉验证方法。

谢谢!

标签: pythonscikit-learncross-validation

解决方案


我不知道您是否已经找到了解决方案(因为它已经很久没有发布了)但这是我使用的解决方案:我使用此处解释的 MAPE 公式实现了我自己的 MAPE 函数,如此所述。简而言之,这是我的代码(不是很干净,但它确实有效):

def my_custom_MAPE(clf, X_val, y_true,epsilon = 0.000001):
      y_pred = clf.predict(X_val)
      ii = 0
      for i in y_true:
          if (i < epsilon) & (i > -epsilon):
             y_true[ii] = epsilon
          else:
             y_true[ii] = y_true[ii]
          ii = ii+1
      
MAPE = (1/len(y_true))*np.sum(np.abs(y_true - y_pred)/y_true)
return MAPE

 

然后在 cross_validate 中调用它

Scoring_type = {'R2':'r2','NegMSE':'neg_mean_squared_error', 'MAPE': my_custom_MAPE}
cv = KFold(n_splits=K, shuffle=True, random_state=seed)
cv_results = cross_validate(Lin_model, X, y, cv=cv, scoring=Scoring_type)

我希望它有帮助


推荐阅读