Метрики Sklearn для регрессии различаются в зависимости от метода оценки. Как получить похожие оценки

#python #machine-learning #scikit-learn #google-cloud-functions

# #python #машинное обучение #scikit-learn #google-облачные функции

Вопрос:

Я пытаюсь получить «одинаковые» показатели, используя RFECV и метод cross_val_score. 2-й метод используется потому, что для меня действительно важно получить показатели с их стандартным отклонением (неопределенности — это круто).

Это и есть регрессионная модель:

 regression = Lasso(alpha=0.1,
              selection="random",
              max_iter=10000,
              random_state=42)
 

Метод RFECV:

 min_number_features =  df.shape[0]//10     
rfecv = RFECV(estimator=regression,
                step=1, 
                  min_features_to_select=min_number_features, 
                  cv=KFold(n_splits=10,
                        shuffle=True,
                        random_state=42),
                  scoring='neg_mean_squared_error')
                   
rfecv.fit(X_train, target_train)
score = rfecv.score(X_train, target_train)
 

В aveage это дает rmse 0,84. Метод cross_val_score выглядит следующим образом:

 metrics_cross_val_score=[
                    "neg_root_mean_squared_error",
                    "neg_mean_squared_error",
                     "r2",
                     "explained_variance",
                     "neg_mean_absolute_error",
                     "max_error",
                     "neg_median_absolute_error"
                    ]
for m in metrics_cross_val_score:
    score=cross_val_score(regression, 
        X_train, 
        target_train, 
        cv=KFold(n_splits=10,
            shuffle=True,
            random_state=42),
        scoring=m)
    score= [-score.mean()/mean,score.std()/mean]    

    metrics[m]=round(score[0],2)
    dev="std_" m
    metrics[dev]=round(score[1],2)
 

Для 2-го метода я нормализую каждую метрику по среднему значению (в попытке получить оценку от 0 до 1): результаты, как правило, не совсем такие, как в 1-м методе (хотя RFECV RMSE находится в пределах интервала cross_val_score RMSE — стандартное отклонение, который довольно большой и нехороший).

Итак, здесь возникают вопросы:

  • Я прочитал много способов нормализации RMSE (в среднем, по y_max-y_min, по квантилям… И я пока не знаю наилучшего подхода к моим данным. У кого-нибудь есть яркая рекомендация по этому поводу?
  • RFECV работает с выбранными функциями, а cross_val_score — со всеми функциями. Если cross_val_score работает с теми же столбцами, что и RFECV выбирает, благополучие cross_val_score RMSE резко снижается, и это меня действительно озадачивает.

Вот сравнение между RFECV RMSE (alg_score) и метриками cross_val_score со стандартным отклонением (все остальное). введите описание изображения здесь

Надеюсь, я выразился правильно. Если вам интересно, вот панель мониторинга со всем, что связано с этим: https://datastudio.google.com/s/gUKsAyZfI5I