java - 在 Java 中实现朴素贝叶斯算法——需要一些指导

标签 java algorithm data-mining

作为一项学校作业,我需要实现我打算用 Java 实现的朴素贝叶斯算法。

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

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

我得到的训练数据集有 4 个属性/特征,它们是数字的并且使用 Weka(在范围 [0 1] 内)标准化(没有缺失值)和一个标称类(是/否)

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

    * 鉴于属性是数字,我使用 PDF(概率密度函数)公式。
      + 为了在 Java 中计算 PDF,我首先根据属性是在类中还是在类中来分离属性,并将它们保存到不同的数组中(数组类是和数组类否)
      + 然后计算每个类的 4 个属性(列)的平均值(行中值的总和/该行中值的数量)和标准占卜
      + 现在要查找给定值 (n) 的 PDF,我会执行 (n-mean)^2/(2*SD^2),
      + 然后找到 P( yes | E) P( no | E) 将所有 4 个给定属性的 PDF 值相乘并比较比较大,表示属于哪个类

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

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

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

最佳答案

你所做的几乎是正确的。

         + 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 文件进行交叉验证。

关于java - 在 Java 中实现朴素贝叶斯算法——需要一些指导,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2888121/

相关文章:

nlp - 如何确定LDA的主题数?

java - 标准差计算未返回预期值

java - Tomcat 启动日志 - 严重 : Error filterStart how to get a stack trace?

Java SimpleDateFormat 不能正常工作

algorithm - 在行和列中查找具有相同编号的位置

python - 如何在 Orange 中创建新的数据表?

java - 使用 Openfire、Smack 和 Play 的聊天网站架构!框架

c++ - 查找数组中一组数字的起点和终点

java - 使用缓存的斐波那契数列

full-text-search - 计算形容词频率的技巧