2010-05-22 34 views
7

一所学校分配我我需要实现朴素贝叶斯算法,我打算用Java做的。Java实现朴素贝叶斯算法 - 需要一些指导

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

因为我寻求指导这里不解决,我会告诉你们我在我的脑袋思考,我认为是正确的做法,并要求回馈,这将非常理解校正/指导。请注意,我是NaïveBayes算法,数据挖掘和一般编程的绝对初学者,因此您可能会在下面看到愚蠢的评论/计算结果:

我给出的训练数据集有4个属性/属性是数字的,归一化(在范围[0 1])使用Weka的(没有缺失值)和一个标称类(是/否)

1)中的数据从一个csv文件来为数字因此

    *给出的属性来数字我使用PDF(概率密度函数)公式。
      +要计算PDF在java中我第一次分离基础上,他们无论是在课堂上是或类中没有的属性,并把它们分成不同的阵列 (array class yes and array class no)
      +然后计算平均值( sum of the values in row/number of values in that row)和标准占卜为每的4个属性(列)的每个类的
      +现在找到在给定值的PDF(n)的我做 (n-mean)^2/(2*SD^2),
      +然后找到 P(yes | E)P(no | E)multiply the PDF value of all 4 given attributes and compare which is larger,这表明它所属的类,以

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

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

我会停在这里,现在(确实有更多的问题),但我很担心,这不会得到鉴于其有多久任何响应。我会非常感谢那些给我们时间阅读我的问题和评论的人。

+0

做了我将如何实现算法听起来正确的概述? – ke3pup 2010-05-23 08:15:14

回答

5

你在做什么几乎是正确的。

  + 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(是)或P(无)。记住决定公式:

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

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

+0

如果可能,肯定使用交叉验证。如果可以避免,请不要测试您的训练数据。 – 2010-05-25 23:57:21

+0

@Shaggy,对培训进行测试是一种选择,也是新数据集或新实施分类器的必备条件。它会告诉你优化是如何完成的。如果分类器在训练数据上表现不佳,那么这个分类器不能用于数据集。编写分类器时,训练数据的性能也可用于诊断目的。 – 2010-05-26 00:12:17