在带有嵌套估计器的管道中使用 GridSearchCV
Use GridSearchCV in a pipeline with a nested estimator
我尝试使用 Pipeline 来构建我的模型:我想用随机 forst 分类器预测多个输出。由于管道只允许最后一步作为分类器,因此我嵌套了我的管道。这在没有 GridSearch 的情况下工作正常。
pipeline = Pipeline([
('vect', CountVectorizer()),
('tfidf', TfidfTransformer()),
('clf', MultiOutputClassifier(RandomForestClassifier(), n_jobs=-1)),
])
现在我尝试将多个参数传递到我的 RF 分类器,但由于它是嵌套的,它将传递到 MultiOutputClassifier
,至少我认为是这样。
param_grid = {
'clf__n_estimators': [200, 500],
'clf__max_features': ['auto', 'sqrt', 'log2'],
'clf__max_depth' : [4,5,6,7,8],
'clf__criterion' :['gini', 'entropy']
}
cv = GridSearchCV(pipeline, param_grid=param_grid)
这会导致错误:ValueError: Invalid parameter criterion for estimator
有没有办法将参数传递给我的 RandomForestClassifier
或者有没有办法通过管道传递多个分类器?
试试这个:
pipeline = Pipeline([
('vect', CountVectorizer()),
('tfidf', TfidfTransformer()),
('clf', MultiOutputClassifier(RandomForestClassifier(), n_jobs=-1)),
])
param_grid = {
'clf__estimator__n_estimators': [200, 500],
'clf__estimator__max_features': ['auto', 'sqrt', 'log2'],
'clf__estimator__max_depth' : [4,5,6,7,8],
'clf__estimator__criterion' :['gini', 'entropy']
}
cv = GridSearchCV(pipeline, param_grid=param_grid, n_jobs=2)
一般来说,您可以通过以下方式访问可调参数:
cv.get_params().keys()
dict_keys(['cv', 'error_score', 'estimator__memory', 'estimator__steps', 'estimator__verbose', 'estimator__vect', 'estimator__tfidf', 'estimator__clf', 'estimator__vect__analyzer', 'estimator__vect__binary', 'estimator__vect__decode_error', 'estimator__vect__dtype', 'estimator__vect__encoding', 'estimator__vect__input', 'estimator__vect__lowercase', 'estimator__vect__max_df', 'estimator__vect__max_features', 'estimator__vect__min_df', 'estimator__vect__ngram_range', 'estimator__vect__preprocessor', 'estimator__vect__stop_words', 'estimator__vect__strip_accents', 'estimator__vect__token_pattern', 'estimator__vect__tokenizer', 'estimator__vect__vocabulary', 'estimator__tfidf__norm', 'estimator__tfidf__smooth_idf', 'estimator__tfidf__sublinear_tf', 'estimator__tfidf__use_idf', 'estimator__clf__estimator__bootstrap', 'estimator__clf__estimator__ccp_alpha', 'estimator__clf__estimator__class_weight', 'estimator__clf__estimator__criterion', 'estimator__clf__estimator__max_depth', 'estimator__clf__estimator__max_features', 'estimator__clf__estimator__max_leaf_nodes', 'estimator__clf__estimator__max_samples', 'estimator__clf__estimator__min_impurity_decrease', 'estimator__clf__estimator__min_impurity_split', 'estimator__clf__estimator__min_samples_leaf', 'estimator__clf__estimator__min_samples_split', 'estimator__clf__estimator__min_weight_fraction_leaf', 'estimator__clf__estimator__n_estimators', 'estimator__clf__estimator__n_jobs', 'estimator__clf__estimator__oob_score', 'estimator__clf__estimator__random_state', 'estimator__clf__estimator__verbose', 'estimator__clf__estimator__warm_start', 'estimator__clf__estimator', 'estimator__clf__n_jobs', 'estimator', 'iid', 'n_jobs', 'param_grid', 'pre_dispatch', 'refit', 'return_train_score', 'scoring', 'verbose'])
我尝试使用 Pipeline 来构建我的模型:我想用随机 forst 分类器预测多个输出。由于管道只允许最后一步作为分类器,因此我嵌套了我的管道。这在没有 GridSearch 的情况下工作正常。
pipeline = Pipeline([
('vect', CountVectorizer()),
('tfidf', TfidfTransformer()),
('clf', MultiOutputClassifier(RandomForestClassifier(), n_jobs=-1)),
])
现在我尝试将多个参数传递到我的 RF 分类器,但由于它是嵌套的,它将传递到 MultiOutputClassifier
,至少我认为是这样。
param_grid = {
'clf__n_estimators': [200, 500],
'clf__max_features': ['auto', 'sqrt', 'log2'],
'clf__max_depth' : [4,5,6,7,8],
'clf__criterion' :['gini', 'entropy']
}
cv = GridSearchCV(pipeline, param_grid=param_grid)
这会导致错误:ValueError: Invalid parameter criterion for estimator
有没有办法将参数传递给我的 RandomForestClassifier
或者有没有办法通过管道传递多个分类器?
试试这个:
pipeline = Pipeline([
('vect', CountVectorizer()),
('tfidf', TfidfTransformer()),
('clf', MultiOutputClassifier(RandomForestClassifier(), n_jobs=-1)),
])
param_grid = {
'clf__estimator__n_estimators': [200, 500],
'clf__estimator__max_features': ['auto', 'sqrt', 'log2'],
'clf__estimator__max_depth' : [4,5,6,7,8],
'clf__estimator__criterion' :['gini', 'entropy']
}
cv = GridSearchCV(pipeline, param_grid=param_grid, n_jobs=2)
一般来说,您可以通过以下方式访问可调参数:
cv.get_params().keys()
dict_keys(['cv', 'error_score', 'estimator__memory', 'estimator__steps', 'estimator__verbose', 'estimator__vect', 'estimator__tfidf', 'estimator__clf', 'estimator__vect__analyzer', 'estimator__vect__binary', 'estimator__vect__decode_error', 'estimator__vect__dtype', 'estimator__vect__encoding', 'estimator__vect__input', 'estimator__vect__lowercase', 'estimator__vect__max_df', 'estimator__vect__max_features', 'estimator__vect__min_df', 'estimator__vect__ngram_range', 'estimator__vect__preprocessor', 'estimator__vect__stop_words', 'estimator__vect__strip_accents', 'estimator__vect__token_pattern', 'estimator__vect__tokenizer', 'estimator__vect__vocabulary', 'estimator__tfidf__norm', 'estimator__tfidf__smooth_idf', 'estimator__tfidf__sublinear_tf', 'estimator__tfidf__use_idf', 'estimator__clf__estimator__bootstrap', 'estimator__clf__estimator__ccp_alpha', 'estimator__clf__estimator__class_weight', 'estimator__clf__estimator__criterion', 'estimator__clf__estimator__max_depth', 'estimator__clf__estimator__max_features', 'estimator__clf__estimator__max_leaf_nodes', 'estimator__clf__estimator__max_samples', 'estimator__clf__estimator__min_impurity_decrease', 'estimator__clf__estimator__min_impurity_split', 'estimator__clf__estimator__min_samples_leaf', 'estimator__clf__estimator__min_samples_split', 'estimator__clf__estimator__min_weight_fraction_leaf', 'estimator__clf__estimator__n_estimators', 'estimator__clf__estimator__n_jobs', 'estimator__clf__estimator__oob_score', 'estimator__clf__estimator__random_state', 'estimator__clf__estimator__verbose', 'estimator__clf__estimator__warm_start', 'estimator__clf__estimator', 'estimator__clf__n_jobs', 'estimator', 'iid', 'n_jobs', 'param_grid', 'pre_dispatch', 'refit', 'return_train_score', 'scoring', 'verbose'])