Dropoutスマートフォン用の表示で見るDropoutデータ分析が好きです。マーケティングとか広告とか因果推論とか機械学習の解釈性に興味があります。特徴量エンジニアリングモデルの学習モデルの精度評価まとめ参考文献はじめに本記事ではtidymodelsを用いたtidyな機械学習フローを紹介したいと思います。tidyverseはデータハンドリングと可視化のためのメタパッケージでしたが、tidymodelsはtydyverseにフィットするやり方で統計モデリング/機械学習をするためのメタパッケージになります。tidymodels配下のパッケージは量が多く使い所が限られているパッケージも多いため、一度に全ては紹介できません。特徴量エンジニアリングモデルの学習モデルの精度評価という機械学習フローを想定し、各パッケージの機能と連携をコンパクトにまとめたいと思います。各パッケージの用途は以下になります。rsample:訓練データ/テストデータの分割recipe:特徴量エンジニアリングparsnip:異なるパッケージのアルゴリズムを同じシンタックスで扱えるようにするラッパーyardstic:モデルの精度評価tidyな機械学習フローtidyverseとtidymodelsを読み込みます。library(tidyverse)library(tidymodels)訓練データとテストデータの分割まず第一に大元のデータを訓練データとテストデータに分割しましょう。データはdiamondsを使って、ダイヤの価格を予測することにします。testing(df_split)データ分割の役割はrsampleが担っています。initial_split()で分割するデータと、訓練データが占める割合を指定します。training()で訓練データを、testing()でテストデータを抽出できます。特徴量エンジニアリング次に特徴量エンジニアリングのためのレシピを作成します。作成したレシピを実際にデータに適用することで、処理済みのデータが作成されます。Forestを用いるための最低限の前処理を行います。all_nominal()特徴量エンジニアリングのための関数はrecipeにまとめられています。recipe()で用いる特徴量とデータを指定し、そこに処理をパイプで重ねていきます。3..)に変換します。(tree系のモデルではなく線形モデルを用いる場合はstep_dummy()でダミー変数にできます。*1all_nominal()は全てのカテゴリカル変数を指定しています。他にもたとえばall_numeric()は全ての連続変数を指定できますし、starts_with()などのtidyverseではお馴染みの関数で指定することもできます。詳細は?selectionsをご確認下さい。レシピができたので実際にデータに適用しましょう。rowsprep()に訓練データを指定し、訓練データの変換を行います。juice()で変換されたデータを抽出することができます。clarity)が順序になっているのがわかるかと思います。次に同じレシピを用いてテストデータも変換します。rowsレシピを新しいデータに適用する場合はbake()を使います*2。モデルの学習recipeで訓練データ/テストデータをモデルに投入できる形に変換できたので、次はparsnipで学習モデルを定義しましょう。Rで機械学習を行う際、学習アルゴリズムごとにパッケージが分かれていて、それ故シンタックスが統一されておらず、各々のシンタックスを覚えるのが大変でした(たとえば入力はformulaなのかmatrixなのかなど)。これを統一的なシンタックスで扱えるようにするメタパッケージとして、たとえばcaretがありましたが、最近よりtidyverseに馴染むパッケージとしてparsnipが開発されました*3。Forestを使用します。今回は回帰問題なのでmode=regressionとしています。rand_forest()で指定できるハイパーパラメータは3つあり、それぞれtrees:作成する決定木の数。min_n:ノードに最低限含まれるサンプル数。mtry:各ノードで分割に用いる特徴量の数。今回は適当に指定しました。set_engine()内でranger固有のパラメータを指定でき、コア数とシードを指定しました。モデルが定義できたので、学習を行います。これはfit()にモデル式と入力データを指定するだけで完結します。学習が済んだので、最後に予測精度を評価しましょう。rows予測結果に対してyardsticの評価指標関数を適用することでモデルの性能が評価できます。yardsticには様々な評価指標関数が含まれており、個別で指定することもできますが、matrics()は回帰モデルの結果に対してRMSE、MAE、R2をまとめて計算してくれます。0.0671まとめ本記事ではtidymodelsによるrsampleで訓練データ/テストデータの分割し、recipeで特徴量エンジニアリングを行い、parsnipでモデルを定義・学習し、yardsticで性能を評価する、tidyな機械学習フローを紹介しました。各パッケージにはまだまだ多くの機能があり、今回紹介できたのは最低限の機能のみです。次回はtidymodelsで交差検証を行い、ハイパーパラメータをチューニングする方法をご紹介できればと思っています。recipeの他のstep関数やselectorは以下をご確認下さい。recipes*2:今回tree系のモデルなので標準化はやっていませんが、たとえば標準化を行う場合は訓練データの平均と分散を用いてテストデータの標準化が行われます。(1)はてなブログをはじめよう!dropout009さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。