过去几天,我一直在尝试用Python实现朴素贝叶斯分类器,使用的是来自UCI的鸢尾花数据集(http://archive.ics.uci.edu/ml/datasets/Iris)。在尝试对100个随机样本进行分类时,我的准确率只有30-40%。我认为我的概率函数是正确的,因为我用维基百科的例子测试过(https://en.wikipedia.org/wiki/Naive_Bayes_classifier#Examples)。
以下是我所做的步骤:
- 加载数据
- 将数据分为三个类别
- 计算每个类别的均值和方差
然后,对于100个随机样本,我:
- 计算每个特征属于某一类别的概率
-
通过将每个类别的概率相乘来计算后验概率的分子
-
将值存储在一个列表中,并获取最高值的索引
-
将最高值的索引与真实索引进行比较(检查预测是否正确)
但不知为何,我的准确率只有30-40%,我是不是做错了什么?
如果你想查看代码,可以在这里找到:http://pastebin.com/sUYm97qi
回答:
哈哈——你的代码非常简洁清晰,所以我直到看到最后才明白是怎么回事。
你比较的是classes[max_index]
,即预测的类别名称,与y[max_index]
,即最大索引处的实例标签值。
尝试将你的代码改为
if(classes[max_index] == y[q]): corr += 1
你应该能得到大约96%的准确率