所以我對發生的事情有一個很好的想法,但我想知道如何處理這個錯誤,我看過其他類似的帖子,但他們並不特定於Gradient Boosting Machine模型。它們似乎都與GLM有關,並且錯誤不是由我不認爲的同一件事引起的。R,插入符號,列車(),預測(),GBM,錯誤:model.frame.default(..)中的錯誤:因素有新的水平
這裏是我的代碼:
myTuneGrid <- expand.grid(n.trees=c(100,200), interaction.depth=c(9,10,11,12), shrinkage=0.1, n.minobsinnode=10)
fitControl <- trainControl(method = "cv", number =5,verboseIter = FALSE,returnResamp = "all")
myModel <- train(as.factor(target) ~ .,data = trainingDataC.GB, method = "gbm",trControl = fitControl,tuneGrid = myTuneGrid)
myPrediction <- predict(myModel,newdata=testDataC)
這裏是我的錯誤:
Error in model.frame.default(Terms, newdata, na.action = na.action, xlev = object$xlevels) : factor 47V has new levels E, H, J
所以我的因子變量有一堆在我的訓練集的水平,但是從錯誤我猜不是全部水平代表我的訓練集。當我進入測試集時,有新的關卡不在我的訓練集中,所以我得到這個錯誤?
這是一個監督學習問題,我不能更改測試集並將數據移動到訓練集。所以這不是一個抽樣問題。
無論如何,有沒有人知道任何設置或快速修復,以便這不會導致我的程序崩潰?
如果您不提供數據,很難提供幫助 – HubertL
沒有「快速修復」。您必須決定如何從樣本預測中完成。而大多數代碼庫默認情況下不允許這樣做,所以您可能必須編寫自定義預測函數......我不確定gbm。 –
所以你只是想錯誤恢復?看看'tryCatch'函數。如果您需要可能更適合您的數據的方法建議,則可以在[stats.se]處詢問。 – MrFlick