gpt4 book ai didi

r - 在R中使用插入符号进行分类的预测(model)和预测(model $ finalModel)之间的差异

转载 作者:行者123 更新时间:2023-12-04 06:19:18 26 4
gpt4 key购买 nike

之间有什么区别

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com