我正在使用sklearn计算出随机森林中的学习曲线。我需要针对许多不同的RF进行此操作,因此我想使用群集和Dask来减少RF拟合的时间。
目前,我实现了以下算法:
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个并行级别:
我的问题是:如果后端为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
正在快速开发中,我发现有很多不同的版本可以做相同的事情,而又不知道哪个是最新的。