小範例中的 vtreat
在這個練習中,你會用 vtreat 在一個小範例上對類別變數做 one-hot encoding。
vtreat 會建立一個「treatment plan」,把類別變數轉換成指示變數(標記為 "lev"),並清理數值變數中的不良值(標記為 "clean")。
若要設計 treatment plan,使用 designTreatmentsZ()(文件)
treatplan <- designTreatmentsZ(data, varlist)
data:原始訓練資料框varlist:要處理的輸入變數向量(字串)。
designTreatmentsZ() 會回傳包含元素 scoreFrame 的清單:這是一個資料框,包含新變數的名稱與型別:
scoreFrame <- treatplan %>%
magrittr::use_series(scoreFrame) %>%
select(varName, origName, code)
varName:新處理後變數的名稱origName:新變數所對應的原始變數名稱code:新變數的型別。"clean":沒有 NA 或 NaN 的數值變數"lev":原始類別變數中特定層級的指示變數。
(magrittr::use_series()(文件)是在管線中可替代 $ 的別名。)
在這些練習中,我們要的是 code 為 "clean" 或 "lev" 的 varName:
newvarlist <- scoreFrame %>%
filter(code %in% c("clean", "lev") %>%
magrittr::use_series(varName)
若要把資料集轉換為全數值且完成 one-hot encoding 的變數,使用 prepare()(文件):
data.treat <- prepare(treatplan, data, varRestrictions = newvarlist)
treatplan:treatment plandata:要處理的資料框varRestrictions:處理後資料中希望保留的變數
已預先載入 dframe 資料框與 magrittr 套件。
本練習屬於課程
R 中的監督式學習:回歸
練習說明
- 列印
dframe。我們假設color和size是輸入變數,而popularity是要被預測的結果變數。 - 建立一個名為
vars的向量,內容是輸入變數的名稱(字串)。 - 載入套件
vtreat。 - 使用
designTreatmentsZ()為vars中的變數建立 treatment plan,指定為變數treatplan。 - 取得並查看 treatment plan 的
scoreFrame,瞭解舊變數到新變數的對應關係。- 你只需要欄位
varName、origName和code。 - 新的指示變數名稱是什麼?連續變數呢?
- 你只需要欄位
- 建立向量
newvars,其內容為code為clean或lev的varName。將它列印出來。 - 使用
prepare()建立新的資料框dframe.treat,它是dframe的 one-hot encoded 版本(不含結果欄)。- 列印並與
dframe比較。
- 列印並與
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
# Print dframe
dframe
# Create and print a vector of variable names
(vars <- ___)
# Load the package vtreat
___
# Create the treatment plan
treatplan <- ___(___, ___)
# Examine the scoreFrame
(scoreFrame <- treatplan %>%
use_series(scoreFrame) %>%
select(___, ___, ___))
# We only want the rows with codes "clean" or "lev"
(newvars <- scoreFrame %>%
filter(code %in% ___) %>%
use_series(varName))
# Create the treated training data
(dframe.treat <- ___(___, ___, varRestriction = newvars))