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