sklearn FeatureHasher 并行化
sklearn FeatureHasher parallelized
sklearn 的 Featurehasher
特征提取器与其 DictVectorizer
对应部分相比有几个优点,这要归功于使用散列技巧。
一个似乎更难利用的优势是它能够 运行 并行。
我的问题是,我怎样才能轻松地使 FeatureHasher
运行 并行?
您可以使用 joblib
(scikit-learn 支持并行处理的库)实现 FeatureHasher.transform
的并行版本:
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>
sklearn 的 Featurehasher
特征提取器与其 DictVectorizer
对应部分相比有几个优点,这要归功于使用散列技巧。
一个似乎更难利用的优势是它能够 运行 并行。
我的问题是,我怎样才能轻松地使 FeatureHasher
运行 并行?
您可以使用 joblib
(scikit-learn 支持并行处理的库)实现 FeatureHasher.transform
的并行版本:
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>