LoginSignup
6
7

More than 3 years have passed since last update.

【機械学習】ランダムフォレストを勉強してみる

Last updated at Posted at 2019-11-26

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

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

Screenshot 2019-11-25 at 14.23.23.png

ランダムフォレストのアルゴリズム

  1. m 個の特徴量を持つサンプルデータセットからk個の特徴量をランダムに選択。
  2. k 個の特徴量を使って決定木を作る。
  3. 1〜2を特徴量の組み合わせを変えながら(もしくは、使用するサブセットをランダムに変えながら boostrap ample)、n回繰り返し、n個の決定木を作ります。
  4. 分類問題では全ての決定木の結果の最頻値、回帰問題では全ての決定木の結果の平均値を最終結果として出力します。

ランダムフォレストの長所と短所

長所

  • 回帰と分類両方に利用できる。
  • 過学習の影響を減少させられる。
  • インプットデータの多少の変動ではモデルは影響されずらい。

短所

  • ノイズが多すぎるデータでは過学習してしまう。
  • 決定木よりも、計算が複雑。
  • 計算時間が長い。

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
6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7