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

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

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

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

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

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


回答:

有两点需要注意。

  1. 朴素贝叶斯通常非常快。它只会遍历一次所有训练数据并累积特征-类别共现统计数据。之后,它使用这些统计数据构建模型。通常情况下,只需用新的(增量)数据重新训练模型即可,不会有什么问题。

  2. 当有新数据时,不需要重新执行上述步骤,只要你仍然存储了特征-类别统计数据。现在你只需像步骤1中那样处理新数据,并持续更新特征-类别共现统计数据。最终,你会得到新的分子(m)和分母(n),这些适用于类先验概率 P(C) 和给定类别的特征概率 P(W|C)。你可以通过 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/n)计算,其中 mn 存储在特征-类别共现矩阵中(或可以从中推导出来)。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注