我正在玩弄“caret”包中的德国信贷数据集。
首先,我构建了一个非常简单的模型:
library(caret)library(randomForest)library(pmml)data(GermanCredit)GermanCredit <- GermanCredit[, -nearZeroVar(GermanCredit)]GermanCredit$CheckingAccountStatus.lt.0 <- NULLGermanCredit$SavingsAccountBonds.lt.100 <- NULLGermanCredit$EmploymentDuration.lt.1 <- NULLGermanCredit$EmploymentDuration.Unemployed <- NULLGermanCredit$Personal.Male.Married.Widowed <- NULLGermanCredit$Property.Unknown <- NULLGermanCredit$Housing.ForFree <- NULLset.seed(100)inTrain <- createDataPartition(GermanCredit$Class, p = .8)[[1]]GermanCreditTrain <- GermanCredit[ inTrain, ]GermanCreditTest <- GermanCredit[-inTrain, ]set.seed(1056)credit.rf <- randomForest(Class~., data = GermanCreditTrain, ntree = 500)
现在,如果我在测试集上预测结果Class,并多次进行,然后比较结果:
credit.pred1 <- predict(credit.rf, GermanCreditTest)credit.pred2 <- predict(credit.rf, GermanCreditTest)credit.pred3 <- predict(credit.rf, GermanCreditTest)all.equal(credit.pred1, credit.pred2)all.equal(credit.pred2, credit.pred3)all.equal(credit.pred1, credit.pred3)
我发现所有三次预测的结果都是相同的。现在,我是通过在RStudio解释器中手动输入代码来做的。但是,如果我从我的文本编辑器中复制粘贴代码(我在这里发布过:https://gist.github.com/anonymous/32b3c8194362d2e10527),我会得到一个错误消息,称在第二次和第三次比较中有3个字符串差异!
这是怎么可能的?
回答:
尝试使用caret的train函数:
credit.rf <- train(Class~., data = GermanCreditTrain, method="rf")
而不是
credit.rf <- randomForest(Class~., data = GermanCreditTrain, ntree = 500)
我能够重现这个问题,但不确定是什么原因导致的。然而,上述方法在粘贴时似乎有效:
credit.rf <- train(Class~., data = GermanCreditTrain, method="rf")> > credit.pred1 <- predict(credit.rf, GermanCreditTest)> credit.pred2 <- predict(credit.rf, GermanCreditTest)> credit.pred3 <- predict(credit.rf, GermanCreditTest)> > all.equal(credit.pred1, credit.pred2)[1] TRUE> all.equal(credit.pred2, credit.pred3)[1] TRUE> all.equal(credit.pred1, credit.pred3)[1] TRUE