【发布时间】:2020-08-23 07:39:37
【问题描述】:
我有什么
我有一个使用我的超参数分布运行的管道
pipe = Pipeline(steps=[
('scale', MinMaxScaler()),
('vt', VarianceThreshold()),
('pca', PCA(random_state=0)),
('select', SelectPercentile()),
('clf', RandomForestClassifier(random_state=0))
])
hyper_params0 = {
'vt__threshold' : stats.distributions.uniform(0, 0.1),
'pca__n_components' : stats.distributions.uniform(0.8, 0.19),
'select__percentile' : stats.distributions.randint(1, 101),
'clf__n_estimators' : stats.distributions.randint(50, 1000),
'clf__criterion' : ['gini', 'entropy'],
'clf__min_samples_split' : stats.distributions.uniform(0, 0.1),
'clf__min_samples_leaf' : stats.distributions.uniform(0, 0.1),
'clf__max_features' : ['sqrt', 'log2', None],
'clf__bootstrap' : [True, False],
}
hyper_params=[
{
**hyper_params0,
**{
'select__score_func' : [mutual_info_classif],
}
},
{
**hyper_params0,
**{
'select__score_func' : [f_classif],
}
}
]
rscv = RandomizedSearchCV(
estimator=pipe,
param_distributions=hyper_params,
n_iter=25,
cv=5,
scoring='f1_macro',
n_jobs=-1,
random_state=0,
verbose=3
)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
rscv.fit(X_train, y_train)
我想要什么
我想做的是在SelectPercentile 内的mutual_info_classif 中搜索n_neighbors 参数。
我尝试了什么
我尝试像这样编辑hyper_params:
hyper_params=[
{
**hyper_params0,
**{
'select__score_func' : [mutual_info_classif],
'select__score_func__n_neighbors' : stats.distributions.randint(3, 15)
}
},
{
**hyper_params0,
**{
'select__score_func' : [f_classif],
}
}
]
但我收到错误 AttributeError: 'function' object has no attribute 'set_params'。我在 scikit-learn 网站 here 上遵循了一个松散的示例,但并没有走得太远。还尝试像这样使用'passthrough':
pipe = Pipeline(steps=[
('scale', MinMaxScaler()),
('vt', VarianceThreshold()),
('pca', PCA(random_state=0)),
('select', 'passthrough'),
('clf', RandomForestClassifier(random_state=0))
])
...
hyper_params=[
{
**hyper_params0,
**{
'select__score_func' : [SelectPercentile(mutual_info_classif)],
'select__score_func__n_neighbors' : stats.distributions.randint(3, 15)
}
},
{
**hyper_params0,
**{
'select__score_func' : [SelectPercentile(f_classif)],
}
}
]
但是得到错误AttributeError: 'str' object has no attribute 'set_params'。
问题
关于如何做到这一点的任何建议?
【问题讨论】:
标签: python scikit-learn pipeline