DS講座 tidymodels講座

【tidymodels講座5】{recipes}特徴量エンジニアリング

こんにちは,shun(@datasciencemore)です!!

今回はtidymodelsの{recipes}についてやっていきます.

0.{recipes}ってなに??

{recipes}ってなんですか??

{recipes}は,特徴量エンジニアリングに関するパッケージだよ!!
{recipes}には特徴量エンジニアリングにぴったりな関数がたくさんあるんだ!!

特徴量エンジニアリングとは,データをアルゴリズムに適した形に変形する処理のことでした.

その特徴量エンジニアリングを楽にやってくるパッケージが{recipes}です.

{recipes}は基本的に以下のように使用します.

①recipe:説明変数,目的変数,学習データを定義

②step:データをどのように変形するか定義

③prep:処理内容の決定

④bake:適用

列の選択は,直接選択する,{dplyr}のselectの中で使用できる関数(starts_withなど)に加え,{recipes}でのみ使用できる以下の便利関数が用意されています.

No. 関数 用途
1

all_numeric

数値型(integer型,double型)の列を指定

2

all_nominal

文字列型(character型,factor型)の列を指定
3

all_numeric_predictors

数値型(integer型,double型)で説明変数の列を指定

4

all_nominal_predictors

文字列型(character型,factor型)で説明変数の列を指定

5

all_predictors

説明変数の列を指定

6

all_outcomes

目的変数の列を指定

例えばこんな感じ.

コーディングするとこのようになります.(※上述の図に記載のコードと多少,異なります.)

こうすると,④bakeのnew_dataで指定したデータを①~③で設定した内容に変形してくれるのです.

この例でコーディングした処理内容は

①recipe:目的変数はStatus,説明変数はそれ以外,学習データはtrain

②step:

・文字列型(factort型)の説明変数をinteger型に変形して
・Home列, Marital列, Job列, Income列, Assets列, Debt列の欠損値を決定木(バギング)による予測値で補間して
・数値型の説明変数を正規化して
・文字列型(factort型)の説明変数をone-hot encodingして
・全ての説明変数のうち,値が同一のものを削除する

③prep:①,②で定義した処理内容を決定する.

④bake:③の処理を適用する.

ここで特徴量エンジニアリングの最重要部分は,②stepです.

②stepでは,step_〇〇〇という関数を複数つなげることで,様々な変形処理を記述することができます.

これらのstep_〇〇〇という関数をつなげることで多種多様な変形方法を記述することができるのです!!

次項からこの便利なstep_〇〇〇のうち,使用頻度が高いものを紹介していきます!

1.数値変数の変換

数値変数を変換したいときに使用する関数です.

linear系のアルゴリズムは標準化を必ずしましょう!!

No関数用途
1

step_normalize

標準化(正規化)

2

step_log

対数変換

3

step_BoxCox

Box-Cox変換

4

step_YeoJohnson

Yeo-Johnson変換

2.カテゴリ変数の変換

カテゴリ変数を変換したいときに使用する関数です.

No関数用途
1

step_dummy

one-hot encoding

2

step_mutate_at

label encoding

3.欠損値の補間

欠損値を補完する場合に使用する関数です.

代表値補間と予測補間に分類できます.

3.1.代表値補間

まずは代表値補間です.

欠損値をその変数の代表値で補間します.

No関数用途
1

step_impute_mean

欠損値を平均で補間

2

step_impute_median

欠損値を中央値で補完

3

step_impute_mode

欠損値を最頻値で補間

4

step_impute_roll

欠損値を移動窓数と統計量

(中央値や平均値など)に応じた値で補完

3.2.予測補間

続きまして予測補間です.

欠損している変数を目的変数,他の変数を説明変数とみなし,予測することで補間します.

本来の目的変数を使用するとテストデータの補間ができないので,予測補間をするときは本来の目的変数は説明変数に含めないようにします.

No関数用途
1

step_impute_linear

欠損値を線形回帰で補間

2

step_impute_knn

欠損値をK近傍法で補完

3

step_impute_bag

欠損値を決定木(バギング)で補間

4.その他の便利関数

ここでは,1~3で紹介しきれなかったけどよく使用する関数を集めました!

No関数用途
1

step_mutate

列の追加,修正

2

step_corr

相関係数が高い列を削除

3

step_zv

全部同じ値の列を削除

4step_nzv

ほとんど同じ値の列を削除

5step_bs

スプライン近似のための基底変換列を作成

6step_naomit

欠損値がある行を削除

ここで紹介した以外にもstep_〇〇〇はたくさんあります!

step_〇〇〇の一覧はこちらの公式ページに乗っています.

まとめ

今回は,特徴量エンジニアリングのためのパッケージ{recipes}についてやってきました!

{recipes}は基本的に以下のように使用します.

①recipe:説明変数,目的変数,学習データを定義

②step:データをどのように変形するか定義

③prep:処理内容の決定

④bake:適用

そして,その中でもどのように変形するかを詳細に記述する部分が②stepの部分です.

②stepでは,step_〇〇〇という関数をつなげることで様々な処理を楽に記述することができます.

step_〇〇〇という関数はここで紹介した以外にたくさんあるので,いろいろ調べてみると勉強になりますよ!!

それでは,お疲れ様でした!!

-DS講座, tidymodels講座