Как оставить результат работы scikit-learn esimator в распределенной системе dask? - PullRequest
1 голос
/ 23 января 2020

Вы можете найти минимально работающий пример ниже (непосредственно взят со страницы 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)

Но это возвращает результат на локальной машине. Это не совсем мой код. В моем коде я использую scikit-learn tfidf vectorizer . После того, как я использую fit_transform(), он возвращает подогнанные и преобразованные данные (в разреженном формате) на мой локальный компьютер. Как я могу оставить результаты в распределенной системе (кластере машин)?

PS: я только что столкнулся с этим из dask_ml.wrappers import ParallelPostFit Может быть, это решение?

1 Ответ

1 голос
/ 23 января 2020

Ответ был перед моими глазами, и я не мог видеть его в течение 3 дней поиска. ParallelPostFit является ответом. Единственная проблема заключается в том, что он не поддерживает fit_transform(), но fit() и transform() работает и возвращает лениво оцененный массив dask (это то, что я искал). Будьте осторожны с этим предупреждением:

Предупреждение

ParallelPostFit не распараллеливает шаг обучения. Основной метод оценки .fit вызывается нормально.

...