Эффективно используя комбинацию конвейера sklearn и gridSearchCV - PullRequest
0 голосов
/ 28 июня 2018

Я использовал sklearn только в течение короткого периода времени, и в настоящее время я пытаюсь построить конвейер вместе с GridSearchCV. Насколько мне известно, конвейер особенно полезен, если вы хотите объединить известную последовательность преобразований вместе с окончательной оценкой и сохранить согласованную перекрестную проверку согласованности. Однако я хотел бы дополнительно использовать конвейер для произвольного объединения набора этапов предварительной обработки с набором оценок. Предположим, например, что у меня есть один объект предварительной обработки (например, StandardScaler ()) и два объекта оценки (например, Lasso () и PLSRegression ()). Чтобы учесть различные возможные комбинации этих объектов (здесь: StandardScaler () И Lasso ()) ИЛИ (StandardScaler () И PLSRegression ())), я создаю конвейер и связанный объект GridSearchCV следующим образом:

# Instantiate the pipeline with a sequence of steps
pipe = Pipeline(steps=[('preprocessor',None), ('estimator',None)])  

# Construct the parameter grid accounting for different combinations 
# of preprocessing and estimation steps
params = [{         
                    'estimator': [Lasso()],
                    'estimator__alpha': [0.5, 1],

                    'preprocessor': [StandardScaler()],
                    'preprocessor__with_mean': [True, False]                   
                    },       
            {
                    'estimator': [PLSRegression()],
                    'estimator__n_components': [1, 2],

                    'preprocessor': [StandardScaler()],
                    'preprocessor__with_mean': [True, False]                    
                    }]

# Instantiate GridSearchCV object
gs = GridSearchCV(estimator=pipe,
                  param_grid=params)

Я нашел это решение в более раннем посте «Параллельный» конвейер, чтобы получить лучшую модель с использованием gridsearch . Тем не менее, я нахожу это несколько обременительным, поскольку либо мне приходится вручную определять все возможные комбинации шагов конвейера, либо мне приходится писать хакерскую функцию, которая выполняет эту работу за меня. Особенно, в контексте гораздо большего количества этапов предварительной обработки и большого разнообразия оценок, это не то, что я хочу делать. Существует ли другой, более простой способ оценки различных комбинаций препроцессоров и оценщиков, предпочтительно в самой конструкции pipe / GridSearchCV?

...