【问题标题】:Save progress between multiple instances of partial_fit in Python SGDClassifier在 Python SGDClassifier 中的多个 partial_fit 实例之间保存进度
【发布时间】:2016-06-10 07:30:46
【问题描述】:

我已成功按照this 示例编写自己的文本分类脚本。

问题是我不希望在 partial_fit 调用的循环中处理大量但现有的数据集,就像他们在示例中所做的那样。我希望能够在数据可用时添加数据,即使我同时关闭了我的 python 脚本。

理想情况下,我想做这样的事情:

2015 年的某个时候:

model2015=partial_fit(dataset2015)

save_to_file(model2015)

关闭我的python脚本

2016 年的某个时候:

再次打开我的python脚本

load_from_file(model2015)

partial_fit(dataset2016 合并 model2015)

save_to_file(model2016)

2017 年的某个时候:

再次打开我的python脚本

等等……

有什么方法可以在 scikit-learn 中做到这一点吗?或者在其他一些包中(也许是 Tensorflow)?

【问题讨论】:

    标签: python-3.x machine-learning scikit-learn text-classification


    【解决方案1】:

    只需腌制您的模型并将其保存到磁盘。另一种方法是转储 .coef_ 和 .intercept_ 字段(这只是两个数组)并在调用 .fit 时将它们用作初始化器

    【讨论】:

    • Pickle 和 joblib 在您想再次适应时肯定不起作用(当您只想预测时它们确实起作用):它们被新调用 fit 或 partial_fit 覆盖。但是我会看看使用 .fit (我猜 partial_fit 不是真的必要)与前一次迭代中的 .coef 和 .intercept ,听起来它可能有效。谢谢!
    • 好的,当我再次调用 fit 时,使用 .coef 和 .intercept 参数确实提高了准确性,所以这似乎正在做我想做的事情。它确实产生了一个新问题:不同的数据集可以有不同数量的类别(类),使用 partial_fit 我可以简单地告诉它使用所有可能的类别(我有一个包含它们列表的文件),但是通过 fit 我可以当 .coef 数组的大小与当前数据集中的类别数不同时,我会收到错误消息。所以我需要一种方法来设置适合的类,就像在 partial_fit 中一样,或者在 partial_fit 中设置一个系数和截距。
    • “Hack”解决方案是使用剩余标签(例如在所有特征上使用“0”)创建汇总点,以强制其接受标签。此外,由于 coef 和 intercept 都依赖于类号 - 您可以从与整个标签集相对应的大小向量开始(因此您调用 first fit 时使用随机权重作为初始值,但具有预定义的大小)
    • 黑客解决方案奏效了(而且它似乎是唯一有效的方法)。将人工示例粘贴到训练数据集的前面。问题解决了。
    • @lejlot,当我只加载 coef 时,截取新模型,如下所示:ideone.com/mxMKJj,我收到错误“提供的 coef_init 与数据集不匹配”。 x2 和 y2 是我的新数据。这对你有什么作用?你能分享更多细节吗?
    猜你喜欢
    • 2017-04-02
    • 2016-08-11
    • 2017-10-15
    • 2020-12-05
    • 2018-03-21
    • 1970-01-01
    • 1970-01-01
    • 2022-11-28
    • 2013-06-29
    相关资源
    最近更新 更多