将大量数据拟合到GMM时,如何解决sklearn中的MemoryError?

时间:2018-08-20 17:09:31

标签: python memory scikit-learn gmm

我正在尝试基于大量提取的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中提到的答案不能解决我的问题,因为假定data_set具有较低的方差,而在我的情况下:

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

增量拟合可能是一个解决方案,但是scikit-learn对于GMM没有这样的partial_fit。我将不胜感激有关如何解决此问题的任何建议,无论是替代性的lib建议,partial_fit参考实现还是逐批处理数据(在这种情况下均不起作用,因为GMM.fit()缺少内存)?

2 个答案:

答案 0 :(得分:1)

使用Dask很简单。
只需使用Dask的DataFrame而不是pandas即可,其他所有内容都可以正常工作。

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

答案 1 :(得分:0)

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

在我的用例Bob中,由于已经实现了所有相关功能,因此非常适合GMM-UBM系统的开发。