Я хотел бы выполнить поиск гиперпараметров для выбора шагов предварительной обработки и моделей в sklearn следующим образом:
pipeline = Pipeline([("combiner", PolynomialFeatures()),
("dimred", PCA()),
("classifier", RandomForestClassifier())])
parameters = [{"combiner": [None]},
{"combiner": [PolynomialFeatures()], "combiner__degree": [2], "combiner__interaction_only": [False, True]},
{"dimred": [None]},
{"dimred": [PCA()], "dimred__n_components": [.95, .75]},
{"classifier": [RandomForestClassifier(n_estimators=100, class_weight="balanced")],
"classifier__max_depth": [5, 10, None]},
{"classifier": [KNeighborsClassifier(weights="distance")],
"classifier__n_neighbors": [3, 7, 11]}]
CV = GridSearchCV(pipeline, parameters, cv=5, scoring="f1_weighted", refit=True, n_jobs=-1)
CV.fit(train_X, train_y)
Конечно, мне нужны результаты с лучшим конвейером с лучшими параметрами. Однако, когда я запрашиваю лучшие оценки с помощью CV.best_estimator_
, я получаю только выигрышные компоненты, а не гиперпараметры:
Pipeline(steps=[('combiner', None), ('dimred', PCA()),
('classifier', RandomForestClassifier())])
Когда я распечатываю CV.best_params_
, я получаю еще более короткую информацию (только с первый элемент Pipeline
, combiner
, без информации о dimred
, classifier
вообще):
{'combiner': None}
Как я могу получить лучшую комбинацию конвейера с компонентами и их гиперпараметрами?