nltk naivebayes 分类器如何在训练结束后学习更多的特征集?

How can nltk naivebayes classifier learn more featuresets after the train ends?

我现在正在nltk_classifier分类句子的类别。

所以我已经使用 11000 个句子的特征集训练了分类器。

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

但我想添加更多(句子,类别)特征集来升级分类器。 我知道的唯一方法是将特征集附加到已学习的特征集列表中。这样会产生新的分类器。但我认为这种方法效率不高,因为训练一个或更少的句子要花很多时间。

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

两件事。

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

  2. 当新数据出现时可以不重做上述步骤,只要您仍然在某处存储了特征-class统计数据。现在,您只需按照与步骤 1 中相同的方式访问新数据,并继续更新特征-class 共现统计数据。在一天结束时,您有新的分子 (m) 和分母 (n),这适用于 class 先验 P(C) 和给定特征的概率 class P(W|C)。您可以通过 m/n 得出概率。

document classification中的贝叶斯公式友情提示:

-- 给定文档 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) 因为每个 class 都有相同的 P(D) 作为分母(因此我们说比例不等于)。

-- 现在右边的所有概率都可以通过相应的分数(m/n)来计算,其中 mn 存储(或可以导出)在特征-class 共现矩阵。