ランダムフォレストとは?
ランダムフォレスト(Random Forest)は機械学習でよく使われるアンサンブルアルゴリズムです。教師あり学習モデルである決定木を結合させ精度を向上させたアンサンブル学習法です。
下の図にあるように、複数の木の結果を組み合わせた、森のような構造をしているためランダムフォレストと呼ばれています。
決定木の特徴として、過学習をしやすいという問題があります。ランダムフォレストでは、その決定木の過学習の影響を減少させることができます。

ランダムフォレストのアルゴリズム
- m 個の特徴量を持つサンプルデータセットからk個の特徴量をランダムに選択。
- k 個の特徴量を使って決定木を作る。
- 1〜2を特徴量の組み合わせを変えながら(もしくは、使用するサブセットをランダムに変えながら boostrap ample)、n回繰り返し、n個の決定木を作ります。
- 分類問題では全ての決定木の結果の最頻値、回帰問題では全ての決定木の結果の平均値を最終結果として出力します。
ランダムフォレストの長所と短所
長所
- 回帰と分類両方に利用できる。
- 過学習の影響を減少させられる。
- インプットデータの多少の変動ではモデルは影響されずらい。
短所
- ノイズが多すぎるデータでは過学習してしまう。
- 決定木よりも、計算が複雑。
- 計算時間が長い。
scikit-learn ランダムフォレスト
import sklearn.ensemble
rf = sklearn.ensemble.RandomForestClassifier()
rf.fit(train_X, train_y)
RandomForestのパラメター
パラメタ- | 概要 | オプション | デフォルト |
---|---|---|---|
criterion | 分割基準 | "gini", "entropy" | "gini" |
splitter | 分割選択の戦略 | "best", "random" | "best" |
max_depth | 木の最深深さ | int | None |
min_samples_split | 分割後ノードの最小サンプルサイズ(小さいと過学習傾向になる) | int(サンプル数)/float(全サンプルに対する割合) | 2 |
min_samples_leaf | 葉(最終ノード)に必要な最小サンプルサイズ(小さいと過学習傾向になる) | int/float | 2 |
max_features | 分割する上で使う特徴量の数(大きいほど過学習の傾向) | int/float, auto, log2 | None |
class_weight | クラスの重み | "balanced", none | none |
presort | データの事前の並べ替え(データサイズによって計算速度が変わる) | bool | False |
min_impurity_decrease | 不純度にリミットをかけノードの伸びを制御する | float | 0. |
boostrap | 決定木の構築の際にサンプルのサブセットを使うか | bool | 1 |
oob_score | boostrapで使われないサンプルを精度評価に使うかどうか | bool | False |
n_jobs | predictとfitでプロセッサーを並列化するか(-1)の時は全て使う | 0,1,-1 | 0 |
random_state | 乱数を発生させる時に使うSeed | int | none |
verbose | 結果の言語化 | 1/0 | 0 |