nltk naivebayes分类器如何在列车结束后学习更多功能集?

时间:2016-11-06 08:25:05

标签: python-3.x machine-learning classification nltk naivebayes

我现在正在对nltk_classifier进行分类句子的分类。

所以我已经使用11000个句子'featuresets训练了分类器。

train_set, test_set = featuresets[1000:], featuresets[:1000]
classifier = naivebayes.NaiveBayesClassifier.train(train_set)

但我想为升级分类器添加更多(句子,类别)功能集。 我知道的唯一方法是将功能集附加到alreay学习的功能集列表中。这样就可以制作出新的分类器。但我认为这种方法效率不高,因为花了很多时间来训练一个或更少的句子。

有没有什么好方法可以通过添加功能集来提高分类器的质量?

1 个答案:

答案 0 :(得分:1)

两件事。

  1. 朴素贝叶斯通常超级快。它只会访问您的所有训练数据一次,并累积要素级共现统计数据。之后,它使用该统计数据来构建模型。通常,使用新的(增量)数据重新训练您的模型不是问题。

  2. 只要您仍然在某处存储要素类统计信息,就可以在新数据出现时不重做上述步骤。现在,您只需按照与步骤1中相同的方式访问新数据,并不断更新要素类共现统计信息。在一天结束时,您有新的分子(m)和分母(n),这适用于两个类先验P(C)和给出类{{1}的特征的概率}。您可以通过P(W|C)推导出概率。

  3. document classification中友情提醒贝叶斯公式:

    - 鉴于文档m/n,文档属于D类别的概率为:

    C_j

    - 这个概率与:

    成正比
    P(C_j|D) = P(D|C_j)*P(C_j)/P(D)
    

    基于:

    • 天真的贝叶斯假设(所有单词,例如,文档中的P(C_j|D) ~ P(W1|C_j) P(W2|C_j) ... P(Wk|C_j) * P(C_j) 都是独立的),
    • 丢弃W1, W2, ..., Wk,因为每个班级都有相同的P(D)分母(因此我们说比例不等于)。

    - 现在右侧的所有概率都可以通过相应的分数(P(D))计算,其中m/nm在特征中存储(或可以导出)级同时矩阵。