[英]Naive Bayes Probabilities in R
所以這是我的情況:我有以下數據集,我嘗試找到一個人 x 是 Sex=f、Weight=l、Height=t 和 Long Hair=y 的條件概率。
當我手工計算時,概率是 0.0333。 但是當我嘗試從 R 預測它時,我得到了一個不同的數字。
library(naivebayes)
train <- read.csv2("c:/....csv")
classifier <- naive_bayes(Sex ~ .,train)
classifier
> test <- data.frame(Height=c("t"), Weight=c("l"), Long.Hair=c("y"))
> test$Height <- factor(test$Height, levels=c("m","s","t"))
> test$Weight <- factor(test$Weight, levels=c("n","l","h"))
> test$Long.Hair <- factor(test$Long.Hair, levels=c("y","n"))
> test
Height Weight Long.Hair
1 t l y
> prediction <- predict(classifier, test ,type="prob")
> prediction
f m
[1,] 0.9881423 0.01185771
有沒有辦法找到我親手得到的那個?
你的手算不對。 在樣本數據中,長頭發的人只有女性,所以如果你手工算出長頭發是女性的條件概率是1。
預測給出(略)小於 1 的概率的唯一原因是predict
方法在預測中添加了少量拉普拉斯平滑,如您將在源代碼中看到的那樣。 默認情況下它總是這樣做,但您可以通過將其設置為一個很小的非零數字來有效地關閉它
classifier <- naive_bayes(Sex ~ .,train, laplace = .Machine$double.eps)
prediction <- predict(classifier, test ,type="prob")
prediction
#> f m
#> [1,] 1 6.661338e-16
我想我們可以稱其為非常朴素的貝葉斯 model。
問題數據以可重現的格式
train <- data.frame(
Height = c("m", "s", "t", "s", "t", "s", "s", "m", "m", "t"),
Weight = c("n", "l", "h", "n", "n", "l", "h", "n", "l", "n"),
Long.Hair = c("n", "y", "n", "y", "y", "n", "n", "n", "y", "n"),
Sex = c("m", "f", "m", "f", "f", "f", "m", "f", "f", "m"))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.