發表文章

目前顯示的是 2月, 2016的文章

[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.把未知的資料再丟進去建一次模型 以上解決方法分享給遇到同樣問題的苦主