Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Random Forest による分類

8,562 views

Published on

決定木は知っているけど、Random Forestって何?という人のためのRandom Forest入門スライドです。

Published in: Data & Analytics
  • Be the first to comment

Random Forest による分類

  1. 1. Random Forest for Classification 2016/2/24 Ken'ichi Matsui
  2. 2. 決定木 Random Forest 特徴 • 分枝とノードのコストを鑑み て剪定を行う • 剪定しない • データからサンプリングを行い データを増やして学習する。 • 各ノードで分割を行う際、ラン ダムに特徴量を選択する メリット • 分割基準が目に見えてわかり やすいのでそこから知見も得 られる • 比較的早い • 予測精度が高い • ランダム性を取り入れ分散を小 さく抑えられている デメリット • 分散が大きくなりがち • 複数の木を使って構成されるの で、分割基準は非常に見えずら い • 比較的遅い 決定木とRandom Forestの比較
  3. 3. … 特徴量: d次元 特徴量: d次元 特徴量: d次元 特徴量: d次元 特徴量: d次元 データ数: N個 データ数: N個 ⇒ ただし、訓練データから重複ありでランダムサンプリングしたもの ブートストラップ サンプル 1 ブートストラップ サンプル 2 ブートストラップ サンプル 3 ブートストラップ サンプル M 重複ありランダムサンプリング ブートストラップサンプル数: M個 訓練データ ブートストラップ法
  4. 4. … … 特徴量: d次元 ブートストラップ サンプル 1 特徴量: d次元 ブートストラップ サンプル 2 特徴量: d次元 ブートストラップ サンプル 3 特徴量: d次元 ブートストラップ サンプル M ブートストラップサンプル数: M個 N個 弱学習器1 弱学習器2 弱学習器3 弱学習器 M Random Forest 木の深さ
  5. 5. 木の深さ … 特徴量: d次元 ブートストラップ サンプル 1 特徴量: d次元 ブートストラップ サンプル 2 特徴量: d次元 ブートストラップ サンプル 3 特徴量: d次元 ブートストラップ サンプル M ブートストラップサンプル数: M個 N個 Random Forest … 弱学習器1 弱学習器2 弱学習器3 弱学習器 M (決定)木がたくさん集まっているので森!
  6. 6. Yes No 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 このノードは ピンクのエリア このノードは ブルーのエリア 弱学習器の各ノードにおける分割 (2次元の場合) 分割前の状態 ※ 簡単化のため特徴量選択を していないとする
  7. 7. 取りうる分割 (2次元の例) この赤い線が不純度を一番下げる分割
  8. 8. axis value ratio_l gini_l ratio_r gini_r ave gini gini x 1.8 0.111 0.000 0.889 0.469 0.417 x 2.45 0.222 0.000 0.778 0.408 0.317 x 3.0 0.333 0.000 0.667 0.278 0.185 x 4.2 0.444 0.375 0.556 0.320 0.344 x 5.75 0.556 0.480 0.444 0.375 0.433 x 6.8 0.667 0.444 0.333 0.000 0.296 x 7.9 0.778 0.490 0.222 0.000 0.381 x 8.85 0.889 0.500 0.111 0.000 0.444 y 1.05 0.111 0.000 0.889 0.469 0.417 y 1.85 0.222 0.500 0.778 0.490 0.492 y 2.6 0.333 0.444 0.667 0.444 0.444 y 3.6 0.444 0.375 0.556 0.320 0.344 y 4.8 0.556 0.480 0.444 0.375 0.433 y 5.95 0.667 0.500 0.333 0.444 0.481 y 6.65 0.778 0.490 0.222 0.000 0.381 y 7.5 0.889 0.500 0.111 0.000 0.444 取りうる分割 (2次元の例) 不純度の計算(gini係数)
  9. 9. ブートストラップサンプル数: M個 … … 特徴量: d次元 ブートストラップ サンプル 1 特徴量: d次元 ブートストラップ サンプル 2 特徴量: d次元 ブートストラップ サンプル 3 特徴量: d次元 ブートストラップ サンプル MN個 データの特徴量はd次元なので各弱学 習器の各ノード分割時に、d次元から d’個サンプリングしたデータから 最良の分割点を探し出して分割する。 ( がよく使われる) Random Forestの特徴量選択
  10. 10. ブートストラップサンプル数: M個 … … 特徴量: d次元 ブートストラップ サンプル 1 特徴量: d次元 ブートストラップ サンプル 2 特徴量: d次元 ブートストラップ サンプル 3 特徴量: d次元 ブートストラップ サンプル MN個 Random Forestの特徴量選択 ⇒ ランダムフォレストの ランダムと言われる所以 データの特徴量はd次元なので各弱学 習器の各ノード分割時に、d次元から d’個サンプリングしたデータから 最良の分割点を探し出して分割する。 ( がよく使われる)
  11. 11. … 弱学習器1 弱学習器2 弱学習器3 弱学習器 M Random Forest (Classification) インプット 「Bだ!」 「Aだ!」 「Bだ!」 「Bだ!」 ⇒ 多数決により”B”に決定。
  12. 12. ブートストラップで作成する木の数 ノード分割時の不純度の計算種別 http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html 特徴量抽出の最大値設定
  13. 13. http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html 木の深さの最大値設定 ノード分割時の分割先の最小データ数 終端ノードの最小データ数 最大終端ノード数 ブートストラップサンプリング実行要否 終端ノードにおける最小分割比
  14. 14. http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html 木の構築時の詳細情報表示設定 fitした時に前回のモデルを再利用する 各クラスにウェイトをかける ブートストラップ、特徴量抽出の乱数シード設定 並列処理数の設定 out-of-bagサンプルを評価に使うか否か
  15. 15. Scikit-LearnとMNISTで試すRandom Forest https://github.com/matsuken92/Qiita_Contents/blob/master/General/Decision_tree.ipynb # Random Forestによるモデル構築 clf = RandomForestClassifier(n_estimators=50, criterion='gini', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features='auto', max_leaf_nodes=None, bootstrap=True, oob_score=False, n_jobs=2, random_state=None, verbose=0, warm_start=False, class_weight=None) clf = clf.fit(x_train, y_train) # 訓練データでの精度確認 print "train" confirm_result(clf, x_train, y_train) classification report precision recall f1-score support 0 1.00 1.00 1.00 5923 1 1.00 1.00 1.00 6742 2 1.00 1.00 1.00 5958 3 1.00 1.00 1.00 6131 4 1.00 1.00 1.00 5842 5 1.00 1.00 1.00 5421 6 1.00 1.00 1.00 5918 7 1.00 1.00 1.00 6265 8 1.00 1.00 1.00 5851 9 1.00 1.00 1.00 5949 avg / total 1.00 1.00 1.00 60000 accuracy 0.999983333333 MNIST (手書き数字データ) コードの全文はココ↓
  16. 16. https://github.com/matsuken92/Qiita_Contents/blob/master/General/Decision_tree.ipynb # 検証データでの精度確認 print "test" confirm_result(clf, x_test, y_test) test confusion matrix [[ 969 0 2 0 0 2 3 1 3 0] [ 0 1122 3 3 1 1 2 0 3 0] [ 5 0 999 6 2 0 4 9 7 0] [ 1 0 10 973 0 7 0 8 8 3] [ 1 0 1 0 947 0 7 0 4 22] [ 4 2 1 14 3 854 5 1 7 1] [ 6 3 1 0 3 5 936 0 4 0] [ 1 3 20 2 3 0 0 989 3 7] [ 5 0 5 8 5 7 4 4 929 7] [ 7 6 3 12 15 3 1 5 4 953]] classification report precision recall f1-score support 0 0.97 0.99 0.98 980 1 0.99 0.99 0.99 1135 2 0.96 0.97 0.96 1032 3 0.96 0.96 0.96 1010 4 0.97 0.96 0.97 982 5 0.97 0.96 0.96 892 6 0.97 0.98 0.97 958 7 0.97 0.96 0.97 1028 8 0.96 0.95 0.95 974 9 0.96 0.94 0.95 1009 avg / total 0.97 0.97 0.97 10000 accuracy 0.9671 Scikit-LearnとMNISTで試すRandom Forest
  17. 17. 拡大 MNIST学習時のRandom Forest 弱学習器の一部 拡大
  18. 18. Random Forestの類似度の算出とMDSによる2次元可視化 元データ(iris)のプロット データ類似度のプロット ※ 類似度の計算はRじゃないとできませんでした・・・ require(rfPermute) data(iris) iris.rf <- randomForest(Species ~ ., data = iris, importance = TRUE, proximity = TRUE) iris.rf proximity.plot(iris.rf, legend.loc = "topleft") http://www.inside-r.org/packages/cran/rfPermute/docs/proximity.plot
  19. 19. 参考 • “Intuition of Random Forest” https://stat.ethz.ch/education/semesters/ss2012/ams/slides/v10.2.pdf • Scikit-Learn RandomForestClassifier http://scikit- learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.ht ml • 「初めてのパターン認識」平井 有三 (著) http://www.amazon.co.jp/dp/4627849710 • 本スライドで使ったPythonコード https://github.com/matsuken92/Qiita_Contents/blob/master/General/Decision_tree .ipynb

×