大型数据集上的 Sklearn-GMM

Sklearn-GMM on large datasets

我有一个很大的数据集(我无法将整个数据存储在内存中)。我想在这个数据集上拟合一个 GMM。

我可以在小批量数据上重复使用 GMM.fit() (sklearn.mixture.GMM) 吗??

没有理由反复贴合。 只需随机抽取您认为您的机器可以在合理时间内计算的尽可能多的数据点。如果变化不是很大,随机样本将具有与完整数据集大致相同的分布。

randomly_sampled = np.random.choice(full_dataset, size=10000, replace=False)
#If data does not fit in memory you can find a way to randomly sample when you read it

GMM.fit(randomly_sampled)

和使用

GMM.predict(full_dataset)
# Again you can fit one by one or batch by batch if you cannot read it in memory

剩下的进行分类。

fit 总是会忘记 scikit-learn 中以前的数据。对于增量拟合,有 partial_fit 函数。不幸的是,GMM 还没有 partial_fit,所以你不能那样做。

我认为您可以在创建 GMM 对象时将 init_para 设置为空字符串 '',这样您就可以训练整个数据集。

正如 Andreas Mueller 所提到的,GMM 还没有 partial_fit 可以让您以迭代方式训练模型。但是您可以在创建 GMM 对象时通过将其值设置为 True 来使用 warm_start。这允许您迭代数据批次并从上次迭代中离开的地方继续训练模型。

希望对您有所帮助!