2010-05-22 99 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