Часто, работая над проектами по науке о данных, нам необходимо создавать конвейеры для прогнозного моделирования, потому что это делает возможным применение шагов предварительной обработки данных и построение модели по сравнению с ручным выполнением всех этих шагов.

К счастью, scikit-learn предоставляет функциональные возможности для построения конвейеров прогнозирования на ходу. Он предоставляет два метода, т.е. Pipeline и make_pipeline . Хотя оба они обеспечивают одинаковую функциональность с точки зрения моделирования, но часто сбивают с толку новичка, когда что использовать.

Pipeline и make_pipeline обеспечивают одинаковую функциональность, но имеют небольшую разницу, которая заключается в том, что make_pipeline генерирует имена шагов автоматически, а с Pipeline мы должны указывать их вручную.

Давайте посмотрим на примеры, чтобы лучше понять разницу:

Пример конвейера

pipe = Pipeline([('vec', CountVectorizer()), ('clf', LogisticRegression()])
param_grid = [{'clf__C': [1, 10, 100, 1000]}
gs = GridSearchCV(pipe, param_grid)
gs.fit(X, y)

Пример make_pipeline

pipe = make_pipeline(CountVectorizer(), LogisticRegression())     
param_grid = [{'logisticregression__C': [1, 10, 100, 1000]}
gs = GridSearchCV(pipe, param_grid)
gs.fit(X, y)

Подводя итог:

  • С Pipeline имена явные. Имя не изменится, если вы измените оценщик/преобразователь, используемый на шаге, например. если вы замените LogisticRegression() на LinearSVC(), вы все равно сможете использовать clf__C.
  • С make_pipeline имена короче и, возможно, более удобочитаемы, т.е. имена автоматически генерируются с использованием простого правила (имя оценщика в нижнем регистре).