ランダムフォレスト回帰分析:決定木を超えるアンサンブル学習【コード有り】

データ分析

こんにちは、nissyです。前回は、決定木について解説しました。今回は、決定木の発展形である「ランダムフォレスト」について取り上げます。

ランダムフォレストは、決定木の強力な表現力と解釈可能性を維持しつつ、その欠点(過学習)を補完する優れた手法です。

ランダムフォレストとは?

ランダムフォレストは、弱学習器としての多数の決定木を訓練し、その予測を組み合わせて最終的な予測を生成するアンサンブル学習の一つです。

ランダムフォレストでは、バギングというテクニックが利用されます。バギング(Bootstrap Aggregating)は、元のデータセットからランダムに選び出したデータ(ブートストラップサンプル)を使用して、多数の弱学習器を訓練する手法です。

 

ブートストラップ法とは、元のデータセットから重複を許してランダムにデータを選び出すサンプリング手法を指します。これにより各決定木は異なるデータセットから学習を行い、これがランダムフォレストが過学習を抑制する主要なメカニズムとなります。

元のデータセットのサンプル数をnとすると、サンプルは重複を許してランダムにn個選択される。元のデータセットの特徴量の数をm個とすると、m個の中から重複を許さずにランダムにp(≦m)個選択される。

 

また、ランダムフォレストには、Out Of Bag (OOB)という重要な概念があります。ブートストラップサンプリングにより、一部のデータはサンプルされずに”袋”の中に残ることがあり、これをOOBデータと呼びます。

これらのOOBデータを使用して、各決定木の性能を評価することができます。これにより、追加の検証データセットを必要とせずにモデルの性能を推定する効率的な方法を提供します。

 

 

 

ランダムフォレストはこれらのメカニズムを通じて、データの多様性を保ちつつ、過学習を抑制することができます。

 

Pythonでのランダムフォレスト実装

今回も「ボストン住宅価格データセット」を用いて「ランダムフォレスト回帰」を行っていきます。

まずは使用するライブラリーをインポートします。

 

次にボストン住宅価格データセットを用意します。

 

以下のコードでデータを学習データとテストデータに分割します。ランダムフォレストは決定木と同様に、標準化は不要です。

 

学習曲線

ランダムフォレストで設定するハイパーパラメータは以下の4つです。

max_features 各決定木で分割に考慮される特徴量の最大数を指定する。特徴量をランダムに選ぶことで、モデルの多様性が増し、過学習を防ぐことができる。max_featuresの値が小さいほど計算速度が速くなるが、バイアスが高くなる(学習不足)。
min_samples_leaf リーフノード(決定木の末端のノード)に必要な最小のサンプル数。min_samples_leafの値が大きいほどモデルは単純になり、過学習を防ぐことができる(バリアンスが低くなり、バイアスが高くなる)。しかし、値が大きすぎるとモデルが単純すぎてデータのパターンを捉えられなる。
bootstrap ブートストラップサンプリングを行うかどうかを指定する。ランダムフォレストでは通常、ブートストラップサンプリングを行う。
n_estimators ランダムフォレストで作成する決定木(弱学習機)の数。n_estimatorsの値が大きいほどモデルのパフォーマンスは向上するが、計算量も増加する。n_estimatorsは経験的に300で安定した値が得られる。

以下コードでは各弱学習器の決定木モデルに入力される特徴量の数割合をOOBによって最適化しています。

 

ハイパーパラメータチューニングの学習曲線を示します。

 

チューニングされたハイパーパラメータを用いてランダムフォレストモデルを構築します。

 

ランダムフォレスト回帰の解析結果がどの程度の予測精度を有しているかを直感的に理解するためにyyプロットを作図します。

 

 

ランダムフォレストの重要度

決定木と同様に、ランダムフォレストも特徴量の重要度を計算することができます。しかしここでの重要度は、すべての決定木にわたって平均化されたものとなります。この特性により、ランダムフォレストは各特徴がモデル全体にとってどれだけ重要であるかを評価するのに非常に役立ちます。

 

以下のコードで特徴量重要度をグラフ化します。

 

 

 

ランダムフォレストの課題

一方で、ランダムフォレストも完璧な手法ではありません。その一つの課題として、計算コストが挙げられます。
多数の決定木を個別に学習させるため、その分だけ計算量が増えるという欠点があります。

また、ランダムフォレストの予測結果の解釈性は、単一の決定木よりも少し難しくなります。
それぞれの決定木が独立に学習され、その結果が集約されるため、個々の決定に至る過程は透明性を欠く場合があります。

まとめ

今回は、決定木の発展形である「ランダムフォレスト」について解説しました。

ランダムフォレストは、多数の決定木(弱学習器)を訓練し、それらの予測を組み合わせることで最終的な予測値を出力します。これにより、決定木の表現力と解釈可能性は保持しつつ、その欠点である過学習を補う強力な手法です。

Pythonを使ったランダムフォレスト回帰分析の具体的な実装法やについても紹介しましたので、是非このツールを活用していただけばと思います

データ分析
未経験の壁をぶっこわ〜す!化学系データサイエンティスト転職ブログ

コメント

タイトルとURLをコピーしました