- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚开始使用朴素贝叶斯进行文本分类。我已经从随附的伪代码快照中对其进行了编码。
我有两个类别,即正面和负面。我总共有2000个样本(IMDB电影评论),其中1800个(900个正,900个负)用于训练分类器,而200个(100个负,100个正)用于测试系统。
它标记了阳性分类文件,但未能正确分类阴性分类文件。属于负面类别的所有文档都被误分类为正面类别,因此准确度为50%。
如果我每个类别的文档都像先测试所有属于阴性类别的文档,然后再测试阳性样本的文档,那么它给我的准确度为100%,但是当我将其混入混合测试样本时,它会失败并将其归为一类(在我的情况下)正)。
我在执行此算法时是否有任何错误或无法使用?
训练样本太少了吗?分类器的性能会随着训练样本的增加而增加吗?
我用weka
和rapid miner
测试了相同的样本,它们都提供了更好的准确性。我知道我犯了一个错误,但是我无法抓住它是什么?这是理解中最简单的错误,但准确性结果完全出乎意料,这让我发疯。这是我的代码算法伪代码。我已经生成了使用tf-idf
进行术语加权的文档向量,并将文档向量用于计算。
TrainMultinomialNB(C, D)
1. V = ExtractVocabulary(D)
2. N = CountDocs(D)
3. For each c E C
4. Do Nc = CountDocsInClass (D, c)
5. Prior[c] = Nc/N
6. Textc = ConcatenateTextOfAllDocsInClass (D,c)
7. For each t E V
8. Do Tct = CountTokensOfTerm(textc, t)
9. For each t E V
10. Do condprob[t][c] = (Tct + 1) /(Sum(Tct) + |V|)
11. Return V, prior, condprob
ApplyMultinomialNB(C, V, prior, condprob, d)
1. W = ExtractTokensFromDoc (V, d)
2. For each c E C
3. Do score [c] = log (prior)
4. For each t E W
5. Do score [c] + = log (condprob[t][c])
6. Return argmax(cEC) score [c]
最佳答案
如果不看实际的代码和数据集,就很难说出问题所在。但是,我正在尝试归纳一些可能的方法来提高朴素贝叶斯性能。可能您需要通过在单词边界上解析每个文档来减少训练中使用的功能单词列表。过滤出停用词并包含此article中显示的bigram搭配。
另一种可能的方法是Fisher method,其中计算文档中每个特征词的正负概率,然后获得组合概率。
关于machine-learning - 朴素贝叶斯分类器性能出乎意料,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20520511/
我是一名优秀的程序员,十分优秀!