新出現的類別層級(novel levels)
當類別變數中的某個層級很罕見時,有時它不會出現在訓練資料中。如果這個罕見層級之後在未來資料裡出現,下游模型可能不知道如何處理。當這類「新出現的層級(novel levels)」出現時,使用 model.matrix 或 caret::dummyVars 進行 one-hot 編碼將無法正確運作。
vtreat 是相較於 model.matrix 更「安全」的 one-hot 編碼替代方案,因為它能安全地處理新出現的層級。vtreat 也會處理資料中的遺漏值(無論是類別或連續變數)。
在這個練習中,你會看到 vtreat 如何處理訓練集中未出現過的類別值。前一題建立的處理計畫 treatplan 與變數集合 newvars 仍可使用。dframe 與新的資料框 testframe 已經預先載入。
本練習屬於課程
R 中的監督式學習:回歸
練習說明
- 列印
dframe與testframe。testframe是否有在dframe中未出現過的顏色?
- 呼叫
prepare()建立testframe的 one-hot 編碼版本(不含目標變數)。命名為testframe.treat並將其列印出來。- 使用
varRestriction參數,僅保留newvars中的變數。 - 黃色那幾筆資料是如何被編碼的?
- 使用
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
# treatplan is available
summary(treatplan)
# newvars is available
newvars
# Print dframe and testframe
___
___
# Use prepare() to one-hot-encode testframe
(testframe.treat <- ___(___, ___, varRestriction = ___))