我是 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)