我正在使用脫字符號來匹配gbm模型。當我撥打trainedGBM$finalModel$fit
時,我得到的輸出顯示正確。爲什麼R gbm模型預測不符合模型擬合?
但是當我打電話給predict(trainedGBM$finalModel, origData, type="response")
時,我得到了非常不同的結果,並且predict(trainedGBM$finalModel, type="response")
即使附加了origData也會產生不同的結果。按照我的想法,這些調用應該產生相同的輸出。有人能幫我找出問題嗎?
library(caret)
library(gbm)
attach(origData)
gbmGrid <- expand.grid(.n.trees = c(2000),
.interaction.depth = c(14:20),
.shrinkage = c(0.005))
trainedGBM <- train(y ~ ., method = "gbm", distribution = "gaussian",
data = origData, tuneGrid = gbmGrid,
trControl = trainControl(method = "repeatedcv", number = 10,
repeats = 3, verboseIter = FALSE,
returnResamp = "all"))
ntrees <- gbm.perf(trainedGBM$finalModel, method="OOB")
data.frame(y,
finalModelFit = trainedGBM$finalModel$fit,
predictDataSpec = predict(trainedGBM$finalModel, origData, type="response", n.trees=ntrees),
predictNoDataSpec = predict(trainedGBM$finalModel, type="response", n.trees=ntrees))
上述代碼產生以下部分結果:基於您gbmGrid
y finalModelFit predictDataSpec predictNoDataSpec
9000 6138.8920 2387.182 2645.993
5000 3850.8817 2767.990 2467.157
3000 3533.1183 2753.551 2044.578
2500 1362.9802 2672.484 1972.361
1500 5080.2112 2449.185 2000.568
750 2284.8188 2728.829 2063.829
1500 2672.0146 2359.566 2344.451
5000 3340.5828 2435.137 2093.939
0 1303.9898 2377.770 2041.871
500 879.9798 2691.886 2034.307
3000 2928.4573 2327.627 1908.876
我的猜測是正確的,這是在'caret'包中?當所有你需要做的事情都放在'library(_whatever_package_train_came_from)' –
這個問題上時,讓人們猜測這種問題是非常不恰當的。此外,作爲一個單獨的whinge:使用'attach'是一個難以理解的常見原因 - 錯誤。當然,你應該更充分地描述「origData」。 –
什麼樣的數據描述在這裏有幫助?我有大約7000條記錄,y可以作爲26個特徵的函數,包括因素和數字。 – Nostradamus