1

Экстрактор функции sklearn's Featurehasher имеет несколько преимуществ по сравнению с его встречной частью DictVectorizer, благодаря использованию хеширующего трюка.sklearn FeatureHasher parallelized

Одно из преимуществ, которое кажется труднее выявить, - его способность работать параллельно.

Мой вопрос: как я могу легко сделать FeatureHasher работать параллельно?

ответ

1

Вы могли бы реализовать параллельную версию FeatureHasher.transform используя joblib (библиотеку Излюбленной scikit учиться для параллельной обработки):

from sklearn.externals.joblib import Parallel, delayed 
import numpy as np 
import scipy.sparse as sp 

def transform_parallel(self, X, n_jobs): 
    transform_splits = Parallel(n_jobs=n_jobs, backend="threading")(
     delayed(self.transform)(X_split) 
     for X_split in np.array_split(X, n_jobs)) 

    return sp.vstack(transform_splits) 

FeatureHasher.transform_parallel = transform_parallel 
f = FeatureHasher() 
f.transform_parallel(np.array([{'a':3,'b':2}]*10), n_jobs=5) 

<10x1048576 sparse matrix of type '<class 'numpy.float64'>' 
    with 20 stored elements in Compressed Sparse Row format> 
+0

Я думаю parallelising DictVectorizer гораздо сложнее? – eleanora

+0

На самом деле я думаю, что тот же код должен работать? – maxymoo

+1

DictVectorizer принимает список словарей в массив numpy. Любой параллельный метод должен обеспечить, чтобы он был согласован между разбиениями. Как вы могли бы обеспечить эту последовательность? – eleanora