開始使用免費開始

新出現的類別層級(novel levels)

當類別變數中的某個層級很罕見時,有時它不會出現在訓練資料中。如果這個罕見層級之後在未來資料裡出現,下游模型可能不知道如何處理。當這類「新出現的層級(novel levels)」出現時,使用 model.matrixcaret::dummyVars 進行 one-hot 編碼將無法正確運作。

vtreat 是相較於 model.matrix 更「安全」的 one-hot 編碼替代方案,因為它能安全地處理新出現的層級。vtreat 也會處理資料中的遺漏值(無論是類別或連續變數)。

在這個練習中,你會看到 vtreat 如何處理訓練集中未出現過的類別值。前一題建立的處理計畫 treatplan 與變數集合 newvars 仍可使用。dframe 與新的資料框 testframe 已經預先載入。

本練習屬於課程

R 中的監督式學習:回歸

檢視課程

練習說明

  • 列印 dframetestframe
    • 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 = ___))
編輯並執行程式碼