天真的贝叶斯在klaR和插入符号

时间:2017-08-02 12:51:29

标签: r machine-learning r-caret naivebayes

我使用包klaR将朴素贝叶斯应用于玩具数据集,一切正常。

接下来,我想使用caret使用method="nb"复制相同的分析,NaiveBayes实际上只是klaR包中Error in NaiveBayes.default(x, y, usekernel = FALSE, fL = param$fL, ...) : Zero variances for at least one class in variables: x1_disc_46, x1_disc_810, x2_disc_46 Timing stopped at: 0.01 0 0.02 函数的包装器。

然而,后一种估计不起作用。我收到一条错误消息。

klaR

我知道玩具数据集的局限性。但是,随着caret包的分析确实运行,我想知道如何使用# Data d <- structure(list(Y = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 1L), .Label = c("0", "1"), class = "factor"), x1_disc = structure(c(1L, 2L, 1L, 2L, 3L, 4L, 4L, 5L, 2L, 4L), .Label = c("_02", "_24", "_46", "_68", "_810"), class = "factor"), x2_disc = structure(c(1L, 1L, 1L, 1L, 2L, 3L, 3L, 3L, 1L, 2L), .Label = c("_02", "_24", "_46"), class = "factor")), .Names = c("Y", "x1_disc", "x2_disc" ), row.names = c(NA, -10L), class = "data.frame") # Works(klaR) library(klaR) fit2 <- NaiveBayes(Y ~ x1_disc + x2_disc, usekernel = FALSE, fL = 0, data=d) predict(fit2, d, threshold = 0) # Does not work (caret) library(caret) model2 <- train(form=Y ~ x1_disc + x2_disc, data=d, method="nb", # Uses package klaR # (see: http://topepo.github.io/caret/train-models-by-tag.html) trControl=trainControl(method="none"), tuneGrid = data.frame(fL=0, usekernel=F, adjust=1)) predict(model2, d, type="prob") 复制完全相同的分析?

以下是代码:

Event

1 个答案:

答案 0 :(得分:1)

我对答案进行了评论,因为它部分解决了您的问题。我遇到了这个Cross Validated answer,它建议在没有S3公式接口的情况下运行插入符号模型:

model2 <- train(y=d$Y, x=d[, 2:3], ...)

我不知道为什么这样做的确切原因,并且它可能与CV问题不同,因为它们没有错误。