На этом шаге мы рассмотрим этапы построения ковейера с помощью этой функции.
Построение конвейера с помощью вышеописанного синтаксиса иногда выглядит немного громоздким и, как правило, нам нет необходимости присваивать имя каждому этапу. Существует удобная функция make_pipeline(), которая позволяет создать конвейер и автоматически присвоить имя каждому этапу, исходя из его класса (напомним, что каждый этап представляет собой кортеж, содержащий имя и экземпляр модели). Синтаксис make_pipeline() выглядит следующим образом:
[In 18]: from sklearn.pipeline import make_pipeline # стандартный синтаксис pipe_long = Pipeline([("scaler", MinMaxScaler()), ("svm", SVC(C=100))]) # сокращенный синтаксис pipe_short = make_pipeline(MinMaxScaler(), SVC(C=100))
Объекты-конвейеры pipe_long и pipe_short выполняют одну и ту же последовательность операций, но в случае с pipe_short имена этапов присваиваются автоматически. Мы можем взглянуть на имена этапов с помощью атрибута steps:
[In 19]: print("Этапы конвейера:\n{}".format(pipe_short.steps)) Этапы конвейера: [('minmaxscaler', MinMaxScaler()), ('svc', SVC(C=100))]
Этапам присвоены имена minmaxscaler и SVC. В общем, имена этапов - это просто названия классов, написанные строчными буквами. Если несколько этапов используют один и тот же класс, добавляется номер:
[In 20]: from sklearn.preprocessing import StandardScaler from sklearn.decomposition import PCA pipe = make_pipeline(StandardScaler(), PCA(n_components=2), StandardScaler()) print("Этапы конвейера:\n{}".format(pipe.steps)) Этапы конвейера: [('standardscaler-1', StandardScaler()), ('pca', PCA(n_components=2)), ('standardscaler-2', StandardScaler())]
Видно, что первый этап StandardScaler был назван standardscaler-1, а второй - standardscaler-2. Однако в данной ситуации было бы лучше использовать архитектуру конвейера с явными именами, чтобы присвоить этапам более содержательные названия.
На следующем шаге мы рассмотрим работу с атрибутами этапов.