機械学習でよく用いられるランダムフォレストについて,実践例を用いて解説します.
実践例で使用している統計解析アプリStaatAppはこちらのページから無料でダウンロードできます.(ランダムフォレストは有料機能となります.)
ランダムフォレストとは
決定木の発展的な手法であるランダムフォレストは,決定木を複数作成してその結果の平均または多数決で分類・推測を行います.複数の決定木は学習データや特徴量に対して無作為抽出行い,様々な条件で作成します.
ランダムフォレストでは多数の決定木を用いることで,1本の木では判断が不十分であった部分を補うことを目指します.
ランダムフォレストの手順
ランダムフォレストを用いた分析・予測は基本的には以下の手順で行います.
ランダムフォレストでははじめにデータの前処理を行います.欠測値がある場合は補完や補正を行い,カテゴリーデータがある場合は置換などでエンコーディングを行います.テストデータは学習したモデルを評価するために作成します.機械学習ではデータを分割することで作成することが多いです.
分析者が設定できるモデルのパラメータ(設定値)をハイパーパラメータと言い,実際に機械学習を行うためにパラメータの設定を行います.(StaatAppでははじめはデフォルト設定で問題ありません.)
モデルの作成(学習)では主に分類問題と回帰問題の2パターンがあります.分類問題はターゲット変数(決定木で予測したい変数)がカテゴリーデータの場合に行い,回帰問題はターゲット変数が数値データの場合に行います.
モデルを作成したらテストデータを用いてモデルの評価を行います.分類問題では混合行列を作成して,正解率や再現率で評価します.回帰問題ではRMSE(二乗平均平方根誤差)やR²(決定係数)でモデルの精度を評価します.
再度ハイパーパラメータの調整(パラメータチューニング)を行い精度が十分と判断した場合,作成したモデルを用いてターゲット変数の予測を行います.
StaatAppを用いたランダムフォレスト
統計解析アプリStaatAppを用いて,実際にランダムフォレストを用いた学習・予測を行います.データサイエンス・機械学習の競技プラットフォームであるKaggleで使用されるタイタニック号のデータセットを用いて解説します.
予測対象は生存状況の有無として,決定木を用いた分類問題を行います.
① 前処理
欠測値の処理やラベルエンコーディング(置換)の方法は以下のページをお読みください.
ここではテストデータの作成を行います.データ操作画面(初期画面)のツールバーからテストデータ作成機能を用いて,学習データとテストデータに分割します.
デフォルト設定のまま「実行」を行うと,全データの下から25%のデータがテストデータとして分割され「データ2」に保存されます.ホールド・アウト検証を行う場合に適しています.
ランダムでデータを分割したい場合は,「シャッフルして分割」をオンにします.
② ターゲット変数・特徴量の選択
ランダムフォレスト機能を選択してランダムフォレスト用のウィンドウを表示します.
ターゲット変数(目的変数)には分類を行いたい変数を,特徴量(説明変数)には分類するための基準とする変数を選択します.
③ ハイパーパラメータの設定
ハイパーパラメータを調整することで過学習や未学習を避け,モデルの予測精度を向上させることができます.各設定項目については補足①をお読みください.
今回はデフォルト設定のままにします.
④ 学習の実行
ツールバーの「モデル作成」ボタンでモデルの作成を実行します.
画面右側の解析結果にサンプルごとの分類結果と特徴量ごとの重要度(影響度)が表示されます.
重要度から旅客運賃が最も分類結果に影響を与えていることがわかります.
⑤ モデルの精度評価
作成したモデルに対して,テストデータを用いてモデルの精度評価を行います.
評価タブを表示してテストデータに「データ2」を選択します.「算出」ボタンをクリックすると以下のようにに4つの評価指標と混合行列が表示されます.
評価指標はそれぞれ値が大きいほどモデルの予測精度が高いことを意味します.混合行列はテストデータ(実測値)と予測値を比較した行列で,生存有無が”yes”の場合はほとんど予測が的中していることがわかります.
予測精度が十分でないと判断して,ハイパーパラメータから最大深度を調整して再度学習を実行します.
学習後,テストデータを用いて評価指標を算出すると先程より予測精度が向上していることがわかります.
⑥ 予測値の算出
作成したモデルに対して予測用データを読み込ませて,ターゲット変数の予測を行います.
予測タブを表示し予測用データの選択,「算出」ボタンをクリックすると予測結果が表示されます.
※ ここでは簡易的にテストデータと同じデータで算出しています.
ここまでがStaatAppを用いた基本的なランダムフォレストを用いた分析手順になります.
補足① ハイパーパラメータ
ランダムフォレストにおけるハイパーパラメータの説明とチューニング方法は以下になります.
種別 | 説明・チューニング方法 |
分割基準 | 分類問題では”ジニ係数”・”エントロピー”・”シャノンゲイン情報”から選択します.ジニ係数の方が連続データに強く,カテゴリーデータに対してはエントロピーが強いとされています. 回帰問題では”二乗誤差”・”平均二乗誤差”・”絶対誤差”・”ポアソン逸脱度”から選択可能です. |
木の数 | 予測に用いる決定木の本数です.本数が多いほど異なるパターンを学習する機会が増え,予測の精度が向上する可能性があります. 本数が多すぎるとモデルの訓練に必要な時間やリソースが大きく増えるとともに,過学習を引き起こす可能性があります. |
最大深度 | ツリーの最大深度は値が大きいほど,深く分割を行います.デフォルト設定では全ての葉が1になるまで分割されます. 過学習を防ぐためには最大値を設定します.また,過学習の防止に最も効果がある場合が多いです. |
葉の最大数 | 最大の葉の数が多いほど分割されます.デフォルト設定では葉の数は無制限です. 過学習を防ぐためには値を小さくして,分割回数を制限します. |
乱数の固定 | 学習ごとに用いられる乱数を固定します.乱数を固定した場合,同じデータで学習した場合の演算結果が等しくなります. |
補足② 回帰問題
回帰問題を行う場合はターゲット変数に数値データを選択して,分析の種類に回帰を選択します.回帰問題では予測値が連続データとして算出されます.
また,モデルの評価指標が分類問題とは異なりRMSE(平均平方二乗誤差)やMAE(平均絶対誤差)で評価します.これらの値は予測結果と実測値との誤差を示し,値が小さいほどモデルの予測精度が高いと言えます.
R²(決定係数)は0~1の間で算出され,1に近いほど当てはまりがよいとされます.
補足③ ランダムフォレストのアルゴリズム
StaatAppでは演算処理としてはPythonで最も有名な機械学習用ライブラリのscikit-learnを使用しています.公式ドキュメントは以下になります.ドキュメント内にアルゴリズムの引用論文なども記載されているため,学術研究で記載する際は参考にしてください.
・分類問題(sklearn.ensemble.DecisionTreeClassifier)
・回帰問題(sklearn.ensemble.DecisionTreeRegressor)