【问题标题】:Naive Bayes Classifier: Only get 30-40% accuracy on iris data set朴素贝叶斯分类器:仅在 iris 数据集上获得 30-40% 的准确率
【发布时间】: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

【问题讨论】:

    标签: python python-2.7 machine-learning naivebayes data-science


    【解决方案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%之间。
    • 还有什么我可以尝试改变的,看看它是否有所改善?我可能在我的实施中做错了什么吗?
    猜你喜欢
    • 2012-07-31
    • 2016-08-12
    • 2017-12-21
    • 2023-03-08
    • 2017-03-24
    • 2017-01-10
    • 2017-11-05
    • 2013-08-07
    相关资源
    最近更新 更多