#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)
Надеюсь, это поможет