開始使用免費開始

小範例中的 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 plan
  • data:要處理的資料框
  • varRestrictions:處理後資料中希望保留的變數

已預先載入 dframe 資料框與 magrittr 套件。

本練習屬於課程

R 中的監督式學習:回歸

檢視課程

練習說明

  • 列印 dframe。我們假設 colorsize 是輸入變數,而 popularity 是要被預測的結果變數。
  • 建立一個名為 vars 的向量,內容是輸入變數的名稱(字串)。
  • 載入套件 vtreat
  • 使用 designTreatmentsZ()vars 中的變數建立 treatment plan,指定為變數 treatplan
  • 取得並查看 treatment plan 的 scoreFrame,瞭解舊變數到新變數的對應關係。
    • 你只需要欄位 varNameorigNamecode
    • 新的指示變數名稱是什麼?連續變數呢?
  • 建立向量 newvars,其內容為 codecleanlevvarName。將它列印出來。
  • 使用 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))
編輯並執行程式碼