如何在 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.
您可以在下面找到一个最小工作示例(直接取自 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.