def _fit_and_score_with_parameters(X, y, cv, best_parameters):
"""Distribute work of non-nested cross-validation across slave nodes."""
# tell slaves testing phase is next
_task_desc = numpy.empty(2, dtype=int)
_task_desc[1] = MPI_MSG_TEST
comm.Bcast([_task_desc, MPI.INT], root=0)
comm.bcast((X, y), root=0)
# Compability with sklearn > 0.18 TODO
_splitted_cv = [(a, b) for a, b in cv.split(X, y)]
assert comm_size >= len(_splitted_cv)
for i, (train_index, test_index) in enumerate(_splitted_cv):
fold_id = i + 1
LOG.info("Testing fold %d", fold_id)
parameters = best_parameters.loc[fold_id, :].to_dict()
work_item = (fold_id, train_index, test_index, parameters)
comm.send(work_item, dest=fold_id, tag=MPI_TAG_TRAIN_TEST_DATA)
scores = {}
for i in range(len(_splitted_cv)):
fold_id, test_result = comm.recv(source=MPI.ANY_SOURCE,
tag=MPI_TAG_RESULT)
scores[fold_id] = test_result
# Tell all nodes to terminate
for i in range(len(_splitted_cv), comm_size):
comm.send((0, None), dest=i, tag=MPI_TAG_TRAIN_TEST_DATA)
return pandas.Series(scores)
评论列表
文章目录