Scikit-learn 中的 GridSearchCV 输出问题
GridSearchCV output problems in Scikit-learn
我想执行超参数搜索以在 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
,没有关于 [=17= 的信息], classifier
随便):
{'combiner': None}
如何获得组件及其超参数的最佳管道组合?
Pipeline
对象有一个 get_params()
方法,其中 returns 管道的参数。这也包括各个步骤的参数。根据您的示例,命令
CV.best_estimator_.get_params()
将检索最佳估算器的所有管道参数,包括您要查找的参数。
由于您的 param_grid
是一个字典列表,每个这样的字典都提供一个单独的网格,并且搜索发生在这些网格的不相交并集上。因此,您的 best_estimator_
和 best_params_
对应于具有 combiner=None
的单点网格以及原始 pipeline
中定义的所有其他内容。 (并且搜索从未使用其他超参数探索 combiner=None
。)
我想执行超参数搜索以在 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
,没有关于 [=17= 的信息], classifier
随便):
{'combiner': None}
如何获得组件及其超参数的最佳管道组合?
Pipeline
对象有一个 get_params()
方法,其中 returns 管道的参数。这也包括各个步骤的参数。根据您的示例,命令
CV.best_estimator_.get_params()
将检索最佳估算器的所有管道参数,包括您要查找的参数。
由于您的 param_grid
是一个字典列表,每个这样的字典都提供一个单独的网格,并且搜索发生在这些网格的不相交并集上。因此,您的 best_estimator_
和 best_params_
对应于具有 combiner=None
的单点网格以及原始 pipeline
中定义的所有其他内容。 (并且搜索从未使用其他超参数探索 combiner=None
。)