[R]Random Forest常見的Error
[Type of predictors in new data do not match that of the training data.]
如果使用R裡面的RF package,建好模型之後放入Testing資料要做預測的時候常常會遇到這個錯誤
這是因為模型裡面的Factor Level跟Testing裡面的不一樣
而且不是說Testing裡面的Factor只要符合模型裡的Factor Level裡其中一個就好了
是Factor Level要完全一模一模
要完全一模一模
要完全一模一模
因為很重要所以說 3次!
例如模型建好了以後 有一個類別變數叫性別,裡面有二個Level是男、女
可是如果你只選取了一筆Testing資料做預測,這一筆的性別是女生,而你沒有把男生的level也設定進去的話
就會一直出現這個令人抓狂的錯誤 而且你不知道到底怎麼回事 為什麼一直過不了
解決的方法就是把Model裡的所有變數的Level通通取出來 強制設定在Testing資料中
就算目前資料裡面沒有這個Level也沒關係,如下
genderLevel <- as.factor(model$forest[[11]]$gender) #把模型中的gender變數裡的level取出
levels(Test$gender) <- levels(genderLevel) #強制設定給Testing的gender
所以保險起見 每一個類別變數都要這樣子設定一次 預測資料的時候才不會又error了
還有另外一個情況是Testing的Factor Level是Model裡面沒有的 例如 model裡面的性別level是男、女
但是Testing的性別level裡面有男、女、未知
這樣就不行了,RF Model不接受建模的時候沒有的level
可以用以下指令看二個類別變數不同的部份
setdiff(levels(Test$gender), levels(Model$gender))
所以解決的方式是 1. 把性別未知那一筆資料刪除 2.把未知的資料再丟進去建一次模型
以上解決方法分享給遇到同樣問題的苦主
我已經將level設定給testing data的變數了,為何還是出現Type of predictors in new data do not match that of the training data.
回覆刪除可以試試用另外一種方法
回覆刪除把rf模型裡的level調出來指定給predict data
levels(PredictData$columnName) <- rfmodels$forest$xlevels$columnName