Поддерживается ли функция sklearn learning_curve dask? - PullRequest
1 голос
/ 02 мая 2019

Я вычисляю кривые обучения из случайных лесов, используя sklearn. Мне нужно сделать это для большого количества различных радиочастот, поэтому я хочу использовать кластер и Dask, чтобы сократить время посадки радиочастот.

В настоящее время я реализовал следующий алгоритм:

from sklearn.externals import joblib
from dask.distributed import Client, LocalCluster

worker_kwargs = dict(memory_limit="2GB", ncores=4)
cluster = LocalCluster(n_workers=4, threads_per_worker=2, **worker_kwargs) # processes=False?
client = Client(cluster)

X, Y = ..., ...
estimator = RandomForestRegressor(n_jobs=-1, **rf_params)
cv = ShuffleSplit(n_splits=5, test_size=0.2)
train_sizes = [...] # 20 different values

with joblib.parallel_backend('dask', scatter=[X,Y]):
    train_sizes, train_scores, test_scores = learning_curve(estimator, X, Y, cv=cv, n_jobs=-1, train_sizes=train_sizes)       

Вот 2 уровня параллелизма:

  • Один для установки RF (n_jobs = -1)
  • Один для зацикливания всех размеров обучающего набора (n_jobs = -1)

Моя проблема: если бэкэнд loky, то это занимает около 23 с.

[Parallel(n_jobs=-1)]: Done  50 out of  50 | elapsed:   22.8s finished

Теперь, если бэкэнд dask, тогда это займет больше времени:

[Parallel(n_jobs=-1)]: Done  50 out of  50 | elapsed:   30.3s finished

Я теперь, когда Dask вводит накладные расходы, но я не за исключением того, что это объясняет всю разницу во времени выполнения.

dask разрабатывается быстро, и я нахожу множество разных версий для одного и того же, не зная, какая из них актуальна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...