【问题标题】:naive bayes classifier dynamic training朴素贝叶斯分类器动态训练
【发布时间】:2020-09-13 08:43:39
【问题描述】:

是否可以(如果可以)动态训练 sklearn MultinomialNB 分类器? 每次我在其中输入电子邮件时,我都想训练(更新)我的垃圾邮件分类器。

我想要这个(不起作用):

x_train, x_test, y_train, y_test = tts(features, labels, test_size=0.2)
clf = MultinomialNB()
for i in range(len(x_train)):
    clf.fit([x_train[i]], [y_train[i]])
preds = clf.predict(x_test)

得到与此类似的结果(工作正常):

x_train, x_test, y_train, y_test = tts(features, labels, test_size=0.2)
clf = MultinomialNB()
clf.fit(x_train, y_train)
preds = clf.predict(x_test)

【问题讨论】:

    标签: python scikit-learn naivebayes online-machine-learning


    【解决方案1】:

    Scikit-learn 支持多种算法的增量学习,包括 MultinomialNB。查看文档here

    您需要使用方法partial_fit() 而不是fit(),因此您的示例代码如下所示:

    x_train, x_test, y_train, y_test = tts(features, labels, test_size=0.2)
    clf = MultinomialNB()
    for i in range(len(x_train)):
        if i == 0:
            clf.partial_fit([x_train[i]], [y_train[I]], classes=numpy.unique(y_train))
        else:
            clf.partial_fit([x_train[i]], [y_train[I]])
    preds = clf.predict(x_test)
    

    编辑:按照@BobWazowski 的建议,将classes 参数添加到partial_fit

    【讨论】:

    • 试过了,效果很好!谢谢!唯一的 partial_fit 要求在第一次调用时传递类。据我了解,我应该通过classes=numpy.unique(y_train) PS:您能否更新您的答案以供将来参考?
    猜你喜欢
    • 2015-06-25
    • 2017-06-21
    • 2023-03-23
    • 2017-08-30
    • 2013-04-11
    • 2018-02-06
    • 2012-04-18
    • 2019-05-04
    相关资源
    最近更新 更多