为什么sklearn LatentDirichletAllocation的fit和partial_fit会返回不同的结果?

时间:2016-02-12 14:30:23

标签: python scikit-learn

奇怪的是,它似乎与fit和partial_fit完全相同。

您可以在以下链接中看到代码:

https://github.com/scikit-learn/scikit-learn/blob/c957249/sklearn/decomposition/online_lda.py#L478

1 个答案:

答案 0 :(得分:8)

不完全相同的代码; partial_fit使用total_samples

"     total_samples:int,optional(default = 1e6)         文件总数。仅在partial_fit方法中使用。"

https://github.com/scikit-learn/scikit-learn/blob/c957249/sklearn/decomposition/online_lda.py#L184

部分适合https://github.com/scikit-learn/scikit-learn/blob/c957249/sklearn/decomposition/online_lda.py#L472

适合https://github.com/scikit-learn/scikit-learn/blob/c957249/sklearn/decomposition/online_lda.py#L510

以防万一您感兴趣:partial_fit是一个很好的候选者,只要您的数据集非常大,就可以使用它。因此,不要遇到可能的记忆问题,而是以较小的批次进行拟合,这称为增量学习

因此,在您的情况下,您应该考虑total_samples默认值为1000000.0。因此,如果您不更改此数字并且实际样本数量较大,那么您将从fit方法和fit_partial获得不同的结果。或者可能是您在fit_partial中使用小批量而不是覆盖您为fit方法提供的所有样本的情况。即使你这样做,你也可以获得不同的结果,如文档中所述:

  • "增量学习者本身可能无法应对新的/看不见的目标类。在这种情况下,您必须使用classes =参数将所有可能的类传递给第一个partial_fit调用。"
  • " [...]选择一个合适的算法是,所有这些算法都不会对每个例子的重要性随着时间的推移[...]"

sklearn文档:https://scikit-learn.org/0.15/modules/scaling_strategies.html#incremental-learning