Я пытаюсь запустить рандомизированный поиск по сетке на оценщике склеарна, но я не хочу проводить перекрестную проверку, потому что у меня уже есть разделение поезда / проверки / теста для моих данных.Я построил функцию для запуска рандомизированного поиска по сетке, но я бы хотел распараллеливать потокиЯ смотрел на joblib и пытался выяснить, как изменить функции Parallel (delayed (func)), но не могу понять, как реализовать в моем коде.
Вот моя функция:
def randomized_grid_search(model=None, param_grid=None, percent=0.5,
X_train=None, y_train=None,
X_val=None, y_val=None):
# converts parameter grid into a list
param_list = list(ParameterGrid(param_grid))
# the number of combinations to try in the grid
n = int(len(param_list) * percent)
# the reduced grid as a list
reduced_grid = sample(param_list, n)
best_score = 0
best_grid = None
"""
Loops through each of the posibble scenarios and
then scores each model with prediction from validation set.
The best score is kept and held with best parameters.
"""
for g in reduced_grid:
model.set_params(**g)
model.fit(X_train,y_train)
y_pred = model.predict(X_val)
recall = recall_score(y_val, y_pred)
if recall > best_score:
best_score = recall
best_grid = g
"""
Combines the training and validation datasets and
trains the model with the best parameters from the
grid search"""
best_model = model
best_model.set_params(**best_grid)
X2 = pd.concat([X_train, X_val])
y2 = pd.concat([y_train, y_val])
return best_model.fit(X2, y2)
С https://joblib.readthedocs.io/en/latest/parallel.html Я думаю, что это направление, в котором я должен идти:
with Parallel(n_jobs=2) as parallel:
accumulator = 0.
n_iter = 0
while accumulator < 1000:
results = parallel(delayed(sqrt)(accumulator + i ** 2)
for i in range(5))
accumulator += sum(results) # synchronization barrier
n_iter += 1
Должен ли я сделать что-то подобное или я все это неправильно?