Joblibでぱぱっと書きました
def job(X, y, params):
...
def grid_search(X, y, search_space, n_jobs=-1):
search_space = [[(k, v) for v in space]
for k, space in search_space.items()]
tasks = []
for params in product(*search_space):
tasks.append({
'job': delayed(job)(X, y, *[p for _, p in params]),
**dict(params)
})
with Parallel(n_jobs=n_jobs) as p:
results = p([task.pop('job') for task in tasks])
results = [{**result, **task} for task, result in zip(tasks, results)]
results = pd.DataFrame(results)
return results
X, y = get_data()
search_space = {
'param_a': [1, 3, 5, 7],
'param_b': ['a', 'b', 'c'],
...,
}
results = grid_search(X, y, search_space)