【问题标题】:Implementing Naïve Bayes algorithm in Java - Need some guidance在 Java 中实现朴素贝叶斯算法 - 需要一些指导
【发布时间】:2011-02-22 16:57:05
【问题描述】:

作为学校作业,我需要实现我打算在 Java 中执行的朴素贝叶斯算法。

为了了解它是如何完成的,我阅读了“数据挖掘 - 实用机器学习工具和技术”这本书,其中有一个关于这个主题的部分,但我仍然不确定阻碍我进步的一些要点。

由于我在这里寻求指导而不是解决方案,所以我会告诉你们我的想法,我认为正确的方法,作为回报,我将不胜感激。请注意,我是朴素贝叶斯算法、数据挖掘和一般编程方面的绝对初学者,因此您可能会在下面看到愚蠢的 cmets/计算:

我给定的训练数据集有 4 个使用 Weka 进行数字化和归一化的属性/特征(范围 [0 1])(无缺失值)和一个名义类(是/否)

1) 来自 csv 文件的数据是数字 HENCE

    * 鉴于属性是数字我使用 PDF(概率密度函数)公式。
      + 要在 java 中计算 PDF,我首先根据属性是在类中还是类中来分离属性,并将它们保存在不同的数组中 (array class yes and array class no)
      + 然后计算每个类的4个属性(列)的均值(sum of the values in row / number of values in that row)和标准占卜
      + 现在查找给定值的 PDF(n)我做(n-mean)^2/(2*SD^2),
      + 然后找到P( yes | E) P( no | E) i multiply the PDF value of all 4 given attributes and compare which is larger,表示它所属的类

在 Java 中,我使用 ArrayList of ArrayListDouble 来存储属性值。

最后我不确定如何获取新数据?我应该要求输入文件(如 csv)还是命令提示符并要求 4 个值?

我现在就到此为止(确实有更多问题),但我担心这不会得到任何回应,因为它已经得到了多长时间。我将非常感谢那些花时间阅读我的问题和评论的人。

【问题讨论】:

  • 我将如何实现算法的概述听起来正确吗?

标签: java algorithm data-mining


【解决方案1】:

你所做的几乎是正确的。

         + Then to find P( yes | E) and P( no | E) i multiply the PDF value of all 4 given attributes and compare which is larger, which indicates the class it belongs to 

在这里,您忘记将先前的 P(yes) 或 P(no) 相乘。记住决策公式:

P(Yes | E) ~= P(Attr_1 | Yes) * P(Attr_2 | Yes) * P(Attr_3 | Yes) * P(Attr_4 | Yes) * P(Yes)

对于朴素贝叶斯(以及任何其他监督学习/分类算法),您需要拥有训练数据和测试数据。您使用训练数据来训练模型并对测试数据进行预测。您可以简单地将训练数据用作测试数据。或者您可以将 csv 文件分成两部分,一份用于训练,一份用于测试。您还可以对 csv 文件进行交叉验证。

【讨论】:

  • 如果可能,一定要使用交叉验证。如果可以避免,切勿测试您的训练数据。
  • @Shaggy,对训练进行测试是一种选择,对于新数据集或新实施的分类器来说也是必须的。它告诉您优化完成的程度。如果一个分类器在训练数据上表现不佳,那么这个分类器就不能用于数据集。在编写分类器时,也可以将训练数据的性能用于诊断目的。
猜你喜欢
  • 2012-01-07
  • 2021-04-09
  • 2012-04-09
  • 2019-02-15
  • 2015-09-16
  • 2012-08-04
  • 2018-12-07
  • 2021-07-24
  • 2018-02-14
相关资源
最近更新 更多