klaRA 和插入符号中的朴素贝叶斯

Posted

技术标签:

【中文标题】klaRA 和插入符号中的朴素贝叶斯【英文标题】:Naive Bayees in klaR and caret 【发布时间】:2018-01-09 17:05:22 【问题描述】:

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

接下来,我想使用method="nb" 复制与caret 相同的分析,这实际上只是klaR 包中NaiveBayes 函数的包装。

但是,后一种估计不起作用。我确实收到一条错误消息。

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")

【问题讨论】:

也许插入符号版本不接受“因素”类的数据。从“usekernal”而不是“usekernel”中的拼写错误,我假设您从交叉验证的问题中获得了代码。您是否按照他们的建议尝试不使用公式界面,而是指定 x=y=?跨度> 感谢您指出错字。我已经纠正了。接下来,我确实尝试指定xy,它成功了!这有点奇怪,但感谢您的快速帮助! 【参考方案1】:

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

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

我不知道为什么这会成功的确切原因,而且这可能与 CV 问题的解释不同,因为他们没有错误。

【讨论】:

原因是非公式方法将两个预测变量保留为因子,而公式方法将它们转换为虚拟变量。 99% 的 R 模型函数遵循此约定,但 klaR::NaiveBayes 和其他一些(基于树的模型)没有。

以上是关于klaRA 和插入符号中的朴素贝叶斯的主要内容,如果未能解决你的问题,请参考以下文章

在 R 中使用插入符号调整朴素贝叶斯分类器

数据挖掘十大经典算法之朴素贝叶斯

三种常用的朴素贝叶斯实现算法——高斯朴素贝叶斯伯努利朴素贝叶斯多项式朴素贝叶斯

朴素贝叶斯以及三种常见模型推导

第10天:NLP补充——朴素贝叶斯(Naive-Bayes)

朴素贝叶斯:朴素贝叶斯定义朴素贝叶斯公式分解朴素贝叶斯分类流程高斯型朴素贝叶斯多项式朴素贝叶斯伯努利型朴素贝叶斯朴素贝叶斯预测概率校准朴素贝叶斯优缺点