簡體   English   中英

R 中的朴素貝葉斯概率

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM