小さな例での 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を表示してください。ここでは、colorとsizeを入力変数、popularityを予測したい目的変数とします。- 入力変数名(文字列)からなるベクトル
varsを作成します。 - パッケージ
vtreatを読み込みます。 designTreatmentsZ()を使って、varsの変数に対するトリートメントプランを作成し、treatplanに代入します。- トリートメントプランから
scoreFrameを取得して確認し、元の変数から新しい変数への対応を見てみましょう。- 必要なのは
varName、origName、codeの3列だけです。 - 新しい指示変数の名前は何ですか? 連続変数はどれですか?
- 必要なのは
codeがcleanまたは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))