代码之家  ›  专栏  ›  技术社区  ›  SuperKogito

在将海量数据拟合到GMM时,如何解决sklearn中的内存错误?

  •  0
  • SuperKogito  · 技术社区  · 6 年前

    我正在尝试基于大量提取的mfcc特性生成通用背景模型(ubm),但是我一直在得到 MemoryError 当我将数据拟合到模型中时。以下是相关的代码部分:

    files_features.shape
    
    (2469082, 56)
    
    gmm = GMM(n_components = 1024, n_iter = 512, covariance_type = 'full', n_init = 3)
    gmm.fit(features)
    

    有没有一种方法可以解决这个错误或分解处理数据以避免内存错误。我是这个领域的新手,如果能得到帮助,我将不胜感激。

    [更新]

    不幸的是,中提到的答案 here 不要解决我的问题,因为假设数据集的方差很低,而在我的情况下:

    round(np.var(files_features), 3)
    
    47.781
    

    增量拟合可能是一种解决方案,但 scikit-learn 没有这样的 partial_fit 对于GMMS。对于如何解决这一问题,无论是其他libs建议、部分适合的引用实现还是逐批处理数据(在本例中不起作用,因为 GMM.fit() 内存不足吗?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Qusai Alothman    6 年前

    使用起来相当简单 Dask .
    只需使用dask的数据框架而不是pandas’,其他的一切都应该可以正常工作而不会发生任何变化。

    作为SciKit学习的替代方法,您可以使用 Turis' Graphlab Create 它可以处理任意大的数据集(尽管我不确定它是否支持GMM)。

        2
  •  0
  •   SuperKogito    6 年前

    对于那些有相同问题的人,我建议使用 Bob library 支持大数据处理,甚至提供并行处理。

    在我的使用案例中 Bob 非常适合GMM-UBM系统的开发,因为所有相关功能都已经实现。