R train(method="naive_bayes") 和 naiveBayes() 非常不同的性能

数据挖掘 nlp r 交叉验证 朴素贝叶斯分类器
2022-03-05 20:27:01

我是 R 新手,遇到了一些困难。我希望 R 能成为一种对文本数据进行机器学习的好方法(灵活、简单)。

几年前,我用 Perl 编写了一个朴素的贝叶斯分类器(从头开始),我试图在 R 中复制它(为了使用 R 启用的所有酷玩具来扩展它)。我的 Perl 脚本使用 LOOCV,整体命中率为 69.4%。在 R 中使用等效的预处理步骤和来自 e1071 包的 naiveBayes() 进行 80-20 拆分,我的命中率为 60.3%。我可以想象这种差异是由于不同的交叉验证方法造成的。

现在,我正在尝试找到一种方法来使用 LOOCV 在我的 perl 脚本和 R 之间进行苹果对苹果的比较。我正在使用带有 method="naive_bayes" 的 train() (来自包“caret”)(来自一个名为“naivebayes”的包)。代码如下。无论我做什么,结果都是可怕的(机会级别,甚至比利用基本速率的无信息模型更糟糕)。很明显,要么我做错了,要么有错误;我之前的 p=0.999 是前者。我希望你们中的一个能给我一个线索。我的代码如下。

性能的另一个方面是速度。Perl 像 R 一样被解释,并在几秒钟内对 655 个样本运行 LOOCV(因此可能是 163 N-1 分析/秒)。R 非常快速地运行单个朴素贝叶斯分析,但 train() 需要一个小时的大部分时间来运行。

此代码运行良好:

classifier <- naiveBayes(dtm_train,data_train$class)
pred <- predict(classifier, newdata=dtm_test)
#create a confusion table 
table("predictions"=pred, "actual"=actual_classes$class)

这是一种使用效果不佳的火车的示例:

train_control <- trainControl(method="LOOCV",verboseIter = TRUE)

model5 <- train(class~., data=dtm_df, 
                trControl=train_control, 
                method="naive_bayes",
                verbose = TRUE
                )
print(model5)
0个回答
没有发现任何回复~