失败
library(e1071)
train.x <- data.frame(
B=c(0,1,0),
C=c(0,0,0),
D=c(0,0,1),
Z=c(1,0,0)
)
classifier <- naiveBayes(x=train.x, y=factor(c(TRUE, TRUE, FALSE)), laplace=1) # use laplace (i.e. alpha) of nearly 0
predict(classifier, train.x, type="raw")
FALSE TRUE
[1,] NA NA
[2,] NA NA
[3,] NA NA
WORKS
train.x <- data.frame(
B=c(0,1,0,1),
C=c(0,0,0,1),
D=c(0,0,1,1),
Z=c(1,0,0,1)
)
classifier <- naiveBayes(x=train.x, y=factor(c(TRUE, TRUE, FALSE, FALSE)), laplace=1) # use laplace (i.e. alpha) of nearly 0
predict(classifier, train.x, type="raw")
FALSE TRUE
[1,] 0.000000002761 0.999999997239
[2,] 0.000000002761 0.999999997239
[3,] 0.997729292055 0.002270707945
[4,] 0.999999994295 0.000000005705
似乎这只有在至少有两个TRUE 和两个FALSE的情况下才有效。
答案 0 :(得分:0)
对于数值变量,naiveBayes
使用每个变量的均值和标准差来计算每个类的每个变量的概率。由于您只有三个训练样例,因此必须至少定义一个类的标准偏差(您提供两个训练样例的类很好)。您可以通过查看分类器的tables
属性来查看,该属性显示均值和标准偏差:
> classifier$tables
$B
B
factor(c(TRUE, TRUE, FALSE)) [,1] [,2]
FALSE 0.0 NA
TRUE 0.5 0.7071068
$C
C
factor(c(TRUE, TRUE, FALSE)) [,1] [,2]
FALSE 0 NA
TRUE 0 0
$D
D
factor(c(TRUE, TRUE, FALSE)) [,1] [,2]
FALSE 1 NA
TRUE 0 0
$Z
Z
factor(c(TRUE, TRUE, FALSE)) [,1] [,2]
FALSE 0.0 NA
TRUE 0.5 0.7071068
naiveBayes
区分数字和分类变量,并且分类变量在没有标准偏差的情况下工作的概率。因此,如果您将数据转换为逻辑,则可以正常工作:
train.x <- sapply(train.x, as.logical)
classifier <- naiveBayes(x=train.x, y=factor(c(TRUE, TRUE, FALSE)), laplace=1)
predict(classifier, train.x, type="raw")
FALSE TRUE
[1,] 0.4705882 0.52941176
[2,] 0.4705882 0.52941176
[3,] 0.9142857 0.08571429
所以,是的,每个班至少需要两个例子。除非你使用分类变量。