我现在正在对nltk_classifier进行分类句子的分类。
所以我已经使用11000个句子'featuresets训练了分类器。
train_set, test_set = featuresets[1000:], featuresets[:1000]
classifier = naivebayes.NaiveBayesClassifier.train(train_set)
但我想为升级分类器添加更多(句子,类别)功能集。 我知道的唯一方法是将功能集附加到alreay学习的功能集列表中。这样就可以制作出新的分类器。但我认为这种方法效率不高,因为花了很多时间来训练一个或更少的句子。
有没有什么好方法可以通过添加功能集来提高分类器的质量?
答案 0 :(得分:1)
两件事。
朴素贝叶斯通常超级快。它只会访问您的所有训练数据一次,并累积要素级共现统计数据。之后,它使用该统计数据来构建模型。通常,使用新的(增量)数据重新训练您的模型不是问题。
只要您仍然在某处存储要素类统计信息,就可以在新数据出现时不重做上述步骤。现在,您只需按照与步骤1中相同的方式访问新数据,并不断更新要素类共现统计信息。在一天结束时,您有新的分子(m
)和分母(n
),这适用于两个类先验P(C)
和给出类{{1}的特征的概率}。您可以通过P(W|C)
推导出概率。
在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/n
和m
在特征中存储(或可以导出)级同时矩阵。