选择R中Naive Bayes Clasification的特征

我想使用朴素贝叶斯分类器进行一些预测.

到目前为止,我可以使用R中的以下(示例)代码进行预测

library(klaR)
library(caret)


Faktor<-x <- sample( LETTERS[1:4], 10000, replace=TRUE, prob=c(0.1, 0.2, 0.65, 0.05) )
alter<-abs(rnorm(10000,30,5))
HF<-abs(rnorm(10000,1000,200))
Diffalq<-rnorm(10000)
Geschlecht<-sample(c("Mann","Frau", "Firma"),10000,replace=TRUE)
data<-data.frame(Faktor,alter,HF,Diffalq,Geschlecht)

set.seed(5678)
flds<-createFolds(data$Faktor, 10)

train<-data[-flds$Fold01 ,]
test<-data[flds$Fold01 ,]

features <- c("HF","alter","Diffalq", "Geschlecht")

formel<-as.formula(paste("Faktor ~ ", paste(features, collapse= "+")))

nb<-NaiveBayes(formel, train, usekernel=TRUE)

pred<-predict(nb,test)

test$Prognose<-as.factor(pred$class)

现在我想通过功能选择来改进这个模型.我的真实数据大约有100个功能.
所以我的问题是,选择最重要的朴素贝叶斯分类特征的最佳方法是什么?
有没有纸张参考?

我尝试了以下代码行,不幸的是,这不起作用

rfe(train[, 2:5],train[, 1], sizes=1:4,rfeControl = rfeControl(functions = ldaFuncs, method = "cv"))

编辑:它给我以下错误信息

Fehler in { :   task 1 failed - "nicht-numerisches Argument für binären Operator"
Calls: rfe ... rfe.default -> nominalRfeWorkflow -> %op% -> <Anonymous>

因为这是德语,您可以在您的机器上重现这一点

如何调整rfe()调用以获得递归功能消除?

最佳答案 此错误似乎是由于ldaFuncs.显然他们在使用矩阵输入时不喜欢因素.可以使用您的测试数据重新创建主要问题

mm <- ldaFuncs$fit(train[2:5], train[,1])
ldaFuncs$pred(mm,train[2:5])
# Error in FUN(x, aperm(array(STATS, dims[perm]), order(perm)), ...) : 
#   non-numeric argument to binary operator

如果你包含因子变量,这似乎只会发生.例如

mm <- ldaFuncs$fit(train[2:4], train[,1])
ldaFuncs$pred(mm,train[2:4])

不会返回相同的错误(并且似乎正常工作).同样,当您使用矩阵语法时,这似乎只是一个问题.如果使用公式/数据语法,则不会出现相同的问题.例如

mm <- ldaFuncs$fit(Faktor ~ alter + HF + Diffalq + Geschlecht, train)
ldaFuncs$pred(mm,train[2:5])

似乎按预期工作.这意味着您有几个不同的选择.您可以使用rfe()公式语法

rfe(Faktor ~ alter + HF + Diffalq + Geschlecht, train, sizes=1:4,
    rfeControl =  rfeControl(functions = ldaFuncs, method = "cv"))

或者你可以用类似的东西自己扩展虚拟变量

train.ex <- cbind(train[,1], model.matrix(~.-Faktor, train)[,-1])
rfe(train.ex[, 2:6],train.ex[, 1], ...)

但是这不记得哪个变量在同一个因子中配对,因此它并不理想.

点赞