[英]Interpreting conditional probabilities returned by naiveBayes classifier in e1071:R
使用以下過程處理分類解決方案:
一種。 使用e1071在R中執行朴素貝葉斯分類。
灣 獲取先驗表和條件概率表
C。 使用應用程序中的PL / SQL程序進行預測的值。 即,最終預測將不涉及R預測函數的使用。
在步驟b中,我看到模型生成后R返回的負數和大於1個條件概率 - 它們是否真的是條件概率?
用2個數據集說明問題 - 一個我能夠解釋,一個我無法解釋。
數據集1:水果鑒定(在這個論壇中看到一個漂亮的Naive Bayes插圖)
Data Frame Fruit_All:
Long Sweet Yellow Fruit
Yes Yes Yes Banana
Yes Yes Yes Banana
Yes Yes Yes Banana
Yes Yes Yes Banana
No Yes Yes Banana
No Yes Yes Orange
No Yes Yes Orange
No Yes Yes Orange
Yes Yes Yes Other
No Yes No Other
Yes Yes Yes Banana
Yes Yes Yes Banana
Yes No Yes Banana
Yes No No Banana
No No Yes Banana
No No Yes Orange
No No Yes Orange
No No Yes Orange
Yes Yes No Other
No No No Other
執行朴素貝葉斯分類:
`NB.fit <- naiveBayes(Fruit~., data=Fruit_All,laplace=0)`
Fruit是Class列,Fruit_All是完整的數據框。
NB.fit中返回的條件概率與預期完全一致。
此外,所有行概率整齊地加起來為1.例如香蕉+黃的0.1 + 0.9
條件概率:
Long
Y No Yes
Banana 0.2 0.8
Orange 1.0 0.0
Other 0.5 0.5
Sweet
Y No Yes
Banana 0.30 0.70
Orange 0.50 0.50
Other 0.25 0.75
Yellow
Y No Yes
Banana 0.10 0.90
Orange 0.00 1.00
Other 0.75 0.25
A-priori probabilities:
Banana Orange Other
0.5 0.3 0.2
我可以使用上面的代碼輕松編寫代碼來預測輸入的結果,例如For Long,Sweet和Yellow都等於yes。
該產品最大的水果:
P(Long|Fruit) * P(Sweet|Fruit) * P(Yellow|Fruit) * apriori P(Fruit)
數據集2:R中可用的虹膜數據集
`NB.fit <- naiveBayes(Species~., data=iris)`
條件概率:
Sepal.Length
Y [,1] [,2]
setosa 5.006 0.3524897
versicolor 5.936 0.5161711
virginica 6.588 0.6358796
Sepal.Width
Y [,1] [,2]
setosa 3.428 0.3790644
versicolor 2.770 0.3137983
virginica 2.974 0.3224966
Petal.Length
Y [,1] [,2]
setosa 1.462 0.1736640
versicolor 4.260 0.4699110
virginica 5.552 0.5518947
Petal.Width
Y [,1] [,2]
setosa 0.246 0.1053856
versicolor 1.326 0.1977527
virginica 2.026 0.2746501
在這種情況下,相同的函數似乎不返回條件概率,因為某些值大於1且沒有行加起來為1。
注意:如果我在R中使用預測函數,我會得到正確的結果作為Iris的預測。
我理解Iris數據集有點不同,因為變量是連續數值而不是與果實示例不同的因素。
對於其他復雜數據集,我甚至將負值視為分類器返回的條件概率。 雖然最終結果在R內很好。
問題:
為Iris數據集返回的條件概率是否真的是條件概率?
我在水果示例中所做的相同產品最大化是否適用於Iris,甚至是條件概率為負的數據集?
是否可以根據Iris條件概率表編寫自定義預測函數?
這個答案遲了大約一年,但我偶然發現了它。 在您編寫時,預測變量是數字的,因此對因子的處理方式不同。 你得到的是條件高斯分布的均值(第一列)和sd(第二列)。 因此,為
Petal.Width
Y [,1] [,2]
setosa 0.246 0.1053856
我們得到平均花瓣寬度為0.246,標准偏差為0.10。 你也可以看到
> iris %>% dplyr::filter(Species=="setosa") %>%
dplyr::summarize(mean(Petal.Width), sd(Petal.Width))
mean(Petal.Width) sd(Petal.Width)
1 0.246 0.1053856
高斯密度用於使用貝葉斯公式反轉條件概率以獲得適當的條件概率。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.