如何在 R 中使 naiveBayes() 的公式参数通用?

Posted

技术标签:

【中文标题】如何在 R 中使 naiveBayes() 的公式参数通用?【英文标题】:How to make generic the formula parameter of naiveBayes() in R? 【发布时间】:2019-10-23 04:45:27 【问题描述】:

当我使用库"e1071" 的函数naiveBayes() 时,需要插入以下类型的公式:

myFormula <- myClass~ feature1 + feature2 + feature3

如果我想让它通用(我不知道相关数据集有多少特征)我该怎么办?我只知道myClass 列将是最后一列,我想考虑所有其他列

【问题讨论】:

【参考方案1】:

您可以使用. 动态引用所有其他列。

myFormula <- cyl ~ .
naiveBayes(myFormula, data = mtcars)



    Call:
naiveBayes.default(x = X, y = Y, laplace = laplace)

A-priori probabilities:
Y
      4       6       8 
0.34375 0.21875 0.43750 

Conditional probabilities:
   mpg
Y       [,1]     [,2]
  4 26.66364 4.509828
  6 19.74286 1.453567
  8 15.10000 2.560048

   disp
Y       [,1]     [,2]
  4 105.1364 26.87159
  6 183.3143 41.56246
  8 353.1000 67.77132

如果您想要动态类,您可以使用substitute 公式并在naiveBayes 函数调用中使用eval 对其进行评估。

dynamicNB <- function(data, class) 
  myFormula <- substitute(class ~ .)
  naiveBayes(eval(myFormula), data = data)


dynamicNB(class = mpg, data = mtcars)

【讨论】:

运行这个:naiveBayes(myFormula, data = df) 我得到Error in model.frame.default(formula = myFormula, data = df, na.action = function (object, : variable lengths differ (found for 'Class')。也许使用点还包括最后一列(带有“类属性”?)我不明白 我也知道它可能看起来很混乱,但Class 是第一个属性,而Survived 是“类属性”(我也在使用泰坦尼克号数据集) 用 mtcars 数据集尝试过,也用第二列。您可以使用dput 提供您的数据吗? 我明白了,我想我得到了你想要的:) 关于我的问题的要点是获得~.。目前我只能对第一类使用几个 if-else 语句,因此我将您的答案标记为正确的:再次感谢!

以上是关于如何在 R 中使 naiveBayes() 的公式参数通用?的主要内容,如果未能解决你的问题,请参考以下文章

数据分析与挖掘 - R语言:贝叶斯分类算法(案例三)

如何在Excel下拉中使字母自动递增 急急急急急!!!!!!!!!

R NaiveBayes 与数值变量有关的问题

解释 naiveBayes 分类器在 e1071:R 中返回的条件概率

关于 NaiveBayes 分类器的查询

如何查找哪些列会影响 R 中的预测