之间有什么区别

predict(rf, newdata=testSet)


predict(rf$finalModel, newdata=testSet)

我用preProcess=c("center", "scale")训练模型
tc <- trainControl("repeatedcv", number=10, repeats=10, classProbs=TRUE, savePred=T)
rf <- train(y~., data=trainingSet, method="rf", trControl=tc, preProc=c("center", "scale"))

当我在居中和缩放的testSet上运行它时,我会收到0个真实肯定
testSetCS <- testSet
xTrans <- preProcess(testSetCS)
testSetCS<- predict(xTrans, testSet)
testSet$Prediction <- predict(rf, newdata=testSet)
testSetCS$Prediction <- predict(rf, newdata=testSetCS)

但是当我在未缩放的testSet上运行它时,会收到一些真实的肯定。
我必须使用rf $ finalModel在居中和缩放的testSet上接收一些真实的正数,而在未缩放的testSet上接收rf对象……我缺少什么?

编辑

测试:
tc <- trainControl("repeatedcv", number=10, repeats=10, classProbs=TRUE, savePred=T)
RF <-  train(Y~., data= trainingSet, method="rf", trControl=tc) #normal trainingData
RF.CS <- train(Y~., data= trainingSet, method="rf", trControl=tc, preProc=c("center", "scale")) #scaled and centered trainingData

在正常的testSet上:
RF predicts reasonable              (Sensitivity= 0.33, Specificity=0.97)
RF$finalModel predicts bad       (Sensitivity= 0.74, Specificity=0.36)
RF.CS predicts reasonable           (Sensitivity= 0.31, Specificity=0.97)
RF.CS$finalModel same results like RF.CS    (Sensitivity= 0.31, Specificity=0.97)

在居中和按比例缩放的testSetCS上:
RF predicts very bad                (Sensitivity= 0.00, Specificity=1.00)
RF$finalModel predicts reasonable       (Sensitivity= 0.33, Specificity=0.98)
RF.CS predicts like RF              (Sensitivity= 0.00, Specificity=1.00)
RF.CS$finalModel predicts like RF       (Sensitivity= 0.00, Specificity=1.00)

所以似乎$ finalModel需要相同格式的trainingSet和testSet,而受训对象仅接受未居中和未缩放的数据,而不管选择的preProcess参数如何?

预测代码(testSet是正常数据,而testSetCS居中并缩放):
testSet$Prediction <- predict(RF, newdata=testSet)
testSet$PredictionFM <- predict(RF$finalModel, newdata=testSet)
testSet$PredictionCS <- predict(RF.CS, newdata=testSet)
testSet$PredictionCSFM <- predict(RF.CS$finalModel, newdata=testSet)

testSetCS$Prediction <- predict(RF, newdata=testSetCS)
testSetCS$PredictionFM <- predict(RF$finalModel, newdata=testSetCS)
testSetCS$PredictionCS <- predict(RF.CS, newdata=testSetCS)
testSetCS$PredictionCSFM <- predict(RF.CS$finalModel, newdata=testSetCS)

最佳答案

坦率,

这确实类似于您对Cross Validated的其他问题。

你真的需要

1)显示每个结果的确切预测代码

2)给我们一个可复制的例子。

使用普通的testSetRF.CSRF.CS$finalModel应该不会给您相同的结果,我们应该能够重现该结果。另外,您的代码中有语法错误,因此可能与您执行的代码不完全相同。

最后,我不太确定为什么要使用finalModel对象。 train的要点是处理细节并以这种方式处理(这是您的选择),从而规避了通常将要应用的完整代码集。

这是一个可重现的示例:

 library(mlbench)
 data(Sonar)

 set.seed(1)
 inTrain <- createDataPartition(Sonar$Class)
 training <- Sonar[inTrain[[1]], ]
 testing <- Sonar[-inTrain[[1]], ]

 pp <- preProcess(training[,-ncol(Sonar)])
 training2 <- predict(pp, training[,-ncol(Sonar)])
 training2$Class <- training$Class
 testing2 <- predict(pp, testing[,-ncol(Sonar)])
 testing2$Class <- testing2$Class

 tc <- trainControl("repeatedcv",
                    number=10,
                    repeats=10,
                    classProbs=TRUE,
                    savePred=T)
 set.seed(2)
 RF <-  train(Class~., data= training,
              method="rf",
              trControl=tc)
 #normal trainingData
 set.seed(2)
 RF.CS <- train(Class~., data= training,
                method="rf",
                trControl=tc,
                preProc=c("center", "scale"))
 #scaled and centered trainingData

以下是一些结果:
 > ## These should not be the same
 > all.equal(predict(RF, testing,  type = "prob")[,1],
 +           predict(RF, testing2, type = "prob")[,1])
 [1] "Mean relative difference: 0.4067554"
 >
 > ## Nor should these
 > all.equal(predict(RF.CS, testing,  type = "prob")[,1],
 +           predict(RF.CS, testing2, type = "prob")[,1])
 [1] "Mean relative difference: 0.3924037"
 >
 > all.equal(predict(RF.CS,            testing, type = "prob")[,1],
 +           predict(RF.CS$finalModel, testing, type = "prob")[,1])
 [1] "names for current but not for target"
 [2] "Mean relative difference: 0.7452435"
 >
 > ## These should be and are close (just based on the
 > ## random sampling used in the final RF fits)
 > all.equal(predict(RF,    testing, type = "prob")[,1],
 +           predict(RF.CS, testing, type = "prob")[,1])
 [1] "Mean relative difference: 0.04198887"

最大限度

关于r - 在R中使用插入符号进行分类的预测(model)和预测(model $ finalModel)之间的差异,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21096909/

10-10 11:40