類似的問題是asked但是答案中的鏈接指向隨機森林示例,它似乎不適用於我的情況。使用脫字號庫預測GBM的可能性
這裏有一個例子我想要做的事:
gbmGrid <- expand.grid(interaction.depth = c(5, 9),
n.trees = (1:3)*200,
shrinkage = c(0.05, 0.1))
fitControl <- trainControl(
method = "cv",
number = 3,
classProbs = TRUE)
gbmFit <- train(strong~.-Id-PlayerName, data = train[1:10000,],
method = "gbm",
trControl = fitControl,
verbose = TRUE,
tuneGrid = gbmGrid)
gbmFit
一切順利,我得到的最佳參數。現在,如果我做了預測:
predictStrong = predict(gbmFit, newdata=train[11000:50000,])
我得到的預測的二元矢量,這是很好的:
[1] 0 1 0 0 1 0 0 0 0 0 0 0 1 1 0 0 1 1 1 0 0 0 1 ...
然而,當我試圖讓概率,我得到一個錯誤:
predictStrong = predict(gbmFit, newdata=train[11000:50000,], type="prob")
Error in `[.data.frame`(out, , obsLevels, drop = FALSE) :
undefined columns selected
這似乎是問題所在?
附加信息:
traceback()
5: stop("undefined columns selected")
4: `[.data.frame`(out, , obsLevels, drop = FALSE)
3: out[, obsLevels, drop = FALSE]
2: predict.train(gbmFit, newdata = train[11000:50000, ], type = "prob")
1: predict(gbmFit, newdata = train[11000:50000, ], type = "prob")
版本:
R version 3.1.0 (2014-04-10) -- "Spring Dance"
Copyright (C) 2014 The R Foundation for Statistical Computing
Platform: x86_64-unknown-linux-gnu (64-bit)
caret version: 6.0-29
編輯: 我見過this topic,以及和我沒有得到有關變量名的錯誤,雖然我有幾個帶下劃線的變量名稱,我假設它是有效的,因爲我使用make.names
並獲得與原始名稱相同的名稱。
colnames(train) == make.names(colnames(train))
[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
'train'數據集來自哪裏?沒有它,這個代碼就不能運行。 – MrFlick
你應該顯示'str(train $ strong)'的結果。由於預測值似乎是數字,我懷疑你正在做迴歸(不分類)。對於分類,使'strong'成爲非「0」和「1」的因子。 – topepo
MrFlick,不幸的是我不允許分享這些數據。@topepo直到星期天我都無法檢查,我很確定它是0級和1級的因素,但是當我能夠檢查時,我會盡快回復您。當然,我想要做一個分類,而不是迴歸。謝謝。 – enedene