【问题标题】:sklearn FeatureHasher parallelizedsklearn FeatureHasher 并行化
【发布时间】:2016-10-09 20:18:56
【问题描述】:

sklearn 的 Featurehasher 特征提取器与其 DictVectorizer 对应部分相比具有多个优势,这要归功于使用散列技巧。

似乎更难挖掘的一个优势是它能够并行运行。

我的问题是,我怎样才能轻松地让FeatureHasher 并行运行?

【问题讨论】:

    标签: python machine-learning scikit-learn feature-extraction


    【解决方案1】:

    您可以使用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>
    

    【讨论】:

    • DictVectorizer 将字典列表放入一个 numpy 数组中。任何并行方法都需要确保它在拆分之间保持一致。您如何确保这种一致性?
    • @eleanora 我们没有并行拟合,我们正在并行转换,字典键到向量索引的映射已经设置,所有工作线程都将获得相同的映射
    • (当然,您必须先训练矢量化器,这没有包含在上面的示例中,因为您不需要适合 FeatureHasher
    • @maxymoo 没错,这正是我从 DictVectorizer 切换到 FeatureHasher 的原因。如果我要对 DictVectorizer 做同样的事情,我将无法精确地处理相同数量的数据,因为我最初必须按顺序拟合它。
    猜你喜欢
    • 2017-04-05
    • 1970-01-01
    • 2017-10-02
    • 2018-02-12
    • 2021-07-23
    • 2015-04-08
    • 2017-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多