Есть ли способ использовать MAPE (ошибка среднего среднего процента) с cross_validate в sklearn?

#python #scikit-learn #cross-validation

#python #scikit-learn #перекрестная проверка

Вопрос:

Я пытаюсь использовать регрессионную модель для обучения и прогнозирования набора данных с несколькими выходами (т. Е. прогнозировать несколько целевых столбцов).

В этом списке из документации sklearn для MAPE нет счетчика: https://scikit-learn.org/stable/modules/model_evaluation.html

Я знаю, что отдельно вы можете вычислить MAPE с помощью sklearn.metrics.mean_absolute_percentage_error . Но есть ли способ объединить его с cross_validate()? Я открыт для использования cross_val_score или других методов перекрестной проверки.

Спасибо!

Ответ №1:

Я не знаю, нашли ли вы уже решение (поскольку прошло много времени с тех пор, как вы опубликовали), но вот решение, которое я использовал: я реализовал свою собственную функцию 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) amp; (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)
  

Надеюсь, это поможет