朴素贝叶斯分类器:仅在 iris 数据集上获得 30-40% 的准确率

Posted

技术标签:

【中文标题】朴素贝叶斯分类器:仅在 iris 数据集上获得 30-40% 的准确率【英文标题】:Naive Bayes Classifier: Only get 30-40% accuracy on iris data set 【发布时间】:2016-07-14 20:44:30 【问题描述】:

最近几天,我正在尝试使用来自 UCI (http://archive.ics.uci.edu/ml/datasets/Iris) 的 iris 数据集在 python 中实现朴素贝叶斯分类器。当试图对 100 个随机样本进行分类时,我只能得到 30-40% 的准确率。我认为我的概率函数是正确的,因为我用***(https://en.wikipedia.org/wiki/Naive_Bayes_classifier#Examples)中的示例对其进行了测试

现在我要做的就是:

我加载数据 我将数据分为3类 我计算每个类的均值和方差

那么对于 100 个随机样本 I:

计算每个特征属于一个类的概率

通过乘以该类的每个概率来计算后验分子

将值存储在列表中并获取最大值的索引

将最高值索引与真实索引进行比较(检查预测是否正确)

不知何故,我只得到 30-40%,我做错了吗?

如果你想看代码,在这里:http://pastebin.com/sUYm97qi

【问题讨论】:

【参考方案1】:

哈哈——你写的代码非常简洁/干净,所以我很困惑,直到我看到最后。

您正在将预测的类名称 classes[max_index] 与最大索引实例标签值 y[max_index] 进行比较。

尝试将您的代码更改为

if(classes[max_index] == y[q]):
    corr += 1

你应该得到大约 96%

【讨论】:

@Lagastic 但如果我在测试集中只选择 50 个值,它仍然会给出 47% 左右? @Tejendra 你是对的,那是由于我在报告结果时犯了一个错误,因为我把 100 个作为测试样本,corr 变量将是每 100 个正确答案的数量。除法 corr根据测试样本的数量,你应该得到大约 96-98% 的准确率。【参考方案2】:

类构建部分出错

class1 = X[0:50]
class2 = X[51:100]
class3 = X[101:150]

应该是

class1 = X[0:50]
class2 = X[50:100]
class3 = X[100:150]

不重叠。不要有多么重要。 无论如何 - 尝试给出一些反馈,然后你得到什么数字。

【讨论】:

改了,准确率范围还是在30%到40%之间。 还有什么我可以尝试改变的,看看它是否有所改善?我可能在我的实施中做错了什么吗?

以上是关于朴素贝叶斯分类器:仅在 iris 数据集上获得 30-40% 的准确率的主要内容,如果未能解决你的问题,请参考以下文章

机器学习理论大会战——朴素贝叶斯(分类实践)

如何将 tf-idf 应用于整个数据集(训练和测试数据集),而不是仅在朴素贝叶斯分类器类中训练数据集?

R中的朴素贝叶斯分类 - 从头开始

Java:如何坚持 Weka 朴素贝叶斯分类器?

贝叶斯分类器(3)朴素贝叶斯分类器

sklearn中的朴素贝叶斯模型及其应用