Source code for research.utils._check_pipelines
from rlearn.utils import check_random_states
from itertools import product
from imblearn.pipeline import Pipeline
from sklearn.base import clone
[docs]def check_pipelines(objects_list, random_state, n_runs):
"""Extract estimators and parameters grids."""
# Create random states
random_states = check_random_states(random_state, n_runs)
pipelines = []
param_grid = []
for comb in product(*objects_list):
name = '|'.join([i[0] for i in comb])
# name, object, grid
comb = [(nm, ob, grd) for nm, ob, grd in comb if ob is not None]
pipelines.append((name, Pipeline([(nm, ob) for nm, ob, _ in comb])))
grids = {'est_name': [name]}
for obj_name, obj, sub_grid in comb:
if 'random_state' in obj.get_params().keys():
grids[f'{name}__{obj_name}__random_state'] = random_states
for param, values in sub_grid.items():
grids[f'{name}__{obj_name}__{param}'] = values
param_grid.append(grids)
return pipelines, param_grid
[docs]def check_pipelines_wrapper(
objects_list,
wrapper,
random_state,
n_runs,
wrapped_only=False
):
wrapper_label = wrapper[0]
wrapper_obj = wrapper[1]
wrapper_grid = wrapper[2]
estimators, param_grids = check_pipelines(
objects_list, random_state, n_runs
)
wrapped_estimators = [
(
f'{wrapper_label}|{name}',
clone(wrapper_obj).set_params(**{'classifier': pipeline})
)
for name, pipeline in estimators
]
wrapped_param_grids = [
{
'est_name': [f'{wrapper_label}|{d["est_name"][0]}'],
**{
k.replace(
d["est_name"][0],
f'{wrapper_label}|{d["est_name"][0]}__classifier'
):v
for k, v in d.items() if k != 'est_name'},
**{f'{wrapper_label}|{d["est_name"][0]}__{k}': v
for k, v in wrapper_grid.items()}
} for d in param_grids
]
if wrapped_only:
return wrapped_estimators, wrapped_param_grids
else:
return (
estimators + wrapped_estimators,
param_grids + wrapped_param_grids
)