2015-06-17 22 views
0

我有四個連續的功能二等貝葉斯分類問題。我試圖部分複製Orange用於計算概率的貝葉斯算法算法。但是我沒有成功獲得Orange輸出的相同值。橙色貝葉斯算法具有連續的特點

數據組大小:150(class0:88及1級:62)

我使用下面的算法

p(class0 | X1, X2, X3, X4) = L0/(L0 + L1) 
p(class1 | X1, X2, X3, X4) = L1/(L0 + L1) 

其中L0和L1是似然

L0 = prior_class0 * product(p(Xi|class0)) 
L1 = prior_class1 * product(p(Xi|class1)) 

prior_class0 and prior_class1 are Laplacian estimators 

prior_class0 = (88 + 1)/(150 + 2) 
prior_class1 = (62 + 1)/(150 + 2) 

橙使用黃土用於計算條件概率(我猜測它不需要重現)。對於這個數據集,它爲python對象classifier.conditional_distributions中給出的兩個類輸出49個點。通過在Xi的周圍點之間使用線性插值,我可以計算p(Xi | class0)和p(Xi | class1)。

1)任何人都可以在橙貝葉斯算法具有連續的特點有何評論?

2)或任何技術諮詢如何設置編譯器/ IDE,我可以從橙色/源/橙/ bayes.cpp功能調試橙C++代碼,並檢查了一些中間結果?

回答

0

橙使用稍微不同的公式,根據Kononenko,給出相同的結果,但允許更好的解釋性和概率的M-估計。它代替產品(p(Xi | class0))計算產品(p(class0 | Xi)/ p(class0))。不過,我認爲這不會影響您的計算,但您可以檢查。計算這些概率的代碼是https://github.com/biolab/orange/blob/master/source/orange/bayes.cpp#L169。請注意,它可以並行處理所有類。

另一件你感興趣的代碼是從黃土密度估計概率的計算。它在https://github.com/biolab/orange/blob/master/source/orange/estimateprob.cpp#L307。注意,大多數操作都在向量上,例如, *result *= (x-x1)/(x2-x1);中的所有變量實際上都是矢量。至於調試,我用Visual Studio編寫了這個代碼(很多年前,有些羞愧地承認 - 看到我使用的可怕編碼風格)。由於我不再使用Windows,因此我忘記了該版本並且無法檢查它。但我從來沒有真正在任何其他操作系統上調試過Orange。

如果您加載的項目,並建立一個調試版本,你還必須構建Python的調試版本。這實際上很簡單(請參閱Python源代碼中的說明),問題是您必須構建調試版本的其他任何二進制庫(例如numpy)。更簡單的方法是構建Orange的發行版,但打開調試信息標誌。這樣你可以使用標準的Python和庫。

+0

感謝您的回答!除法p(class0 | Xi)/ p(class0)產生差異,現在我得到與橙色輸出相同的結果。因此計算ex L0 = prior_class0 *乘積(p(Xi | class0)/ p(class0))的可能性。然而問題出現了,這個公式與貝葉斯定理有什麼關係?如果我理解正確,那麼在貝葉斯定理中,可能性是通過將先驗概率與原始帖子中的條件概率相乘來計算的。你能給一些參考來證明Orange使用的公式,因爲我對貝葉斯分類不是很熟悉嗎? –