【问题标题】:Why does the fit and the partial_fit of the sklearn LatentDirichletAllocation return different results ?为什么 sklearn LatentDirichletAllocation 的 fit 和 partial_fit 返回不同的结果?
【发布时间】:2016-05-23 17:59:52
【问题描述】:

奇怪的是,fit 和 partial_fit 的代码似乎完全相同。

您可以在以下链接查看代码:

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

【问题讨论】:

    标签: python scikit-learn


    【解决方案1】:

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

    " total_samples :int,可选(默认= 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

    【讨论】:

      猜你喜欢
      • 2018-08-18
      • 2017-04-02
      • 1970-01-01
      • 2010-10-31
      • 2013-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多