始める無料で始める

小さな例での vtreat

この演習では、vtreat を使って小さな例のカテゴリ変数を one-hot エンコードします。 vtreat は、カテゴリ変数を指示変数("lev" でコード化)に変換し、数値変数から不適切な値を除去する("clean" でコード化)ための「トリートメントプラン」を作成します。

トリートメントプランを設計するには 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 エンコード済みの変数に変換するには、prepare()ドキュメント)を使います。

data.treat <- prepare(treatplan, data, varRestrictions = newvarlist)
  • treatplan: トリートメントプラン
  • data: 処理対象のデータフレーム
  • varRestrictions: 処理後のデータに含めたい変数

dframe データフレームと magrittr パッケージはあらかじめ読み込まれています。

この演習はコースの一部です

R による Supervised Learning:回帰

コースを見る

演習の手順

  • dframe を表示してください。ここでは、colorsize を入力変数、popularity を予測したい目的変数とします。
  • 入力変数名(文字列)からなるベクトル vars を作成します。
  • パッケージ vtreat を読み込みます。
  • designTreatmentsZ() を使って、vars の変数に対するトリートメントプランを作成し、treatplan に代入します。
  • トリートメントプランから scoreFrame を取得して確認し、元の変数から新しい変数への対応を見てみましょう。
    • 必要なのは varNameorigNamecode の3列だけです。
    • 新しい指示変数の名前は何ですか? 連続変数はどれですか?
  • codeclean または lev のときの varName を含むベクトル newvars を作成し、表示します。
  • prepare() を使って、dframe の one-hot エンコード版(目的変数の列は含めない)である新しいデータフレーム dframe.treat を作成します。
    • それを表示し、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))
コードを編集して実行