[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.把未知的資料再丟進去建一次模型



以上解決方法分享給遇到同樣問題的苦主

留言

  1. 我已經將level設定給testing data的變數了,為何還是出現Type of predictors in new data do not match that of the training data.

    回覆刪除
  2. 可以試試用另外一種方法

    把rf模型裡的level調出來指定給predict data

    levels(PredictData$columnName) <- rfmodels$forest$xlevels$columnName

    回覆刪除

張貼留言

這個網誌中的熱門文章

R中Try and Catch的寫法

如何將DSM(NAS)變成Mail Server

使用VBA記錄股市每分鐘的交易記錄