Проверьте интерфейс Pipeline и это хорошее введение. Конвейеры - это чистый способ организации предварительной обработки с выбором моделей и гиперпараметров.
Моя базовая настройка выглядит так:
from sklearn.pipeline import Pipeline, FeatureUnion, make_pipeline
from sklearn.preprocessing import OneHotEncoder
from sklearn.base import BaseEstimator, TransformerMixin
from sklearn.neighbors import KNeighborsClassifier
class Columns(BaseEstimator, TransformerMixin):
def __init__(self, names=None):
self.names = names
def fit(self, X, y=None, **fit_params):
return self
def transform(self, X):
return X[self.names]
numeric = [list of numeric column names]
categorical = [list of categorical column names]
pipe = Pipeline([
("features", FeatureUnion([
('numeric', make_pipeline(Columns(names=numeric),StandardScaler())),
('categorical', make_pipeline(Columns(names=categorical),OneHotEncoder(sparse=False)))
])),
('model', KNeighborsClassifier())
])
Это позволяет вам просто опробовать различные классификаторы, функциональные преобразователи (например, MinMaxScaler () вместо StandardScaler ()), даже в большом сеточном поиске вместе с гиперпараметрами классификатора.