如何在 dask 分布式系统中留下 scikit-learn esimator 结果?

How to leave scikit-learn esimator result in dask distributed system?

您可以在下面找到一个最小工作示例(直接取自 dask-ml 页面,仅对 Client() 进行更改以使其在分布式系统中工作)

import numpy as np
from dask.distributed import Client

import joblib
from sklearn.datasets import load_digits
from sklearn.model_selection import RandomizedSearchCV
from sklearn.svm import SVC

# Don't forget to start the dask scheduler and connect worker(s) to it.
client = Client('localhost:8786')             

digits = load_digits()

param_space = {
    'C': np.logspace(-6, 6, 13),
    'gamma': np.logspace(-8, 8, 17),
    'tol': np.logspace(-4, -1, 4),
    'class_weight': [None, 'balanced'],
}

model = SVC(kernel='rbf')
search = RandomizedSearchCV(model, param_space, cv=3, n_iter=50, verbose=10)

with joblib.parallel_backend('dask'):
    search.fit(digits.data, digits.target)

但是这个returns结果到本地机器。这不完全是我的代码。在我的代码中 我正在使用 scikit-learn tfidf vectorizer。在我使用 fit_transform() 之后,它会将拟合和转换后的数据(以稀疏格式)返回到我的本地机器。如何将结果留在分布式系统(机器集群)中?

PS: 我刚遇到这个from dask_ml.wrappers import ParallelPostFit也许这就是解决方案?

答案就在眼前,找了3天也没有看到。 ParallelPostFit 就是答案。唯一的问题是它不支持 fit_transform()fit()transform() 有效并且它 returns 是一个延迟评估的 dask 数组(这就是我正在寻找的)。注意这个警告:

Warning

ParallelPostFit does not parallelize the training step. The underlying estimator’s .fit method is called normally.