機械学習チュートリアルのランダム森林:アルゴリズムとその特徴選択原理


ランダム森林は集積学習baggingクラス法の一種であり,最も古い集積学習アルゴリズムの一つでもあり,Breimanは2001年にこの方法を提案した.baggingクラスの方法として,ランダム森林はほとんどのデータセットで単独の決定ツリーよりも優れた性能を示すことができ,同時にランダム森林自体も特徴的な選択方法として機能することができる.これまでで最も有名なアルゴリズムの一つと呼ばれています.
boostingとbaggingクラスの方法の違いと特性については、以下のブログで具体的に紹介しましたが、ここでは機械学習チュートリアルのBoostingとbaggingを繰り返し説明することはありません.また、学習器の汎化能力を高めるbaggingクラスの方法よりも、分類器の精度を高めるboosting方法が今日注目されています.次のブログでは3つの主流のboosting方法機械学習教程の勾配向上方法を述べた:GBDTとその拡張モデルXGBBoost機械学習教程の勾配向上方法:GBDT処理分類問題機械学習教程の加性モデル:GBDT退化AdaBoost原理機械学習教程の集積学習アルゴリズム:AdaBoost人工知能における数学修練|AdaBoostの数学原理:分布更新の導出
ランダム森林の原理
ランダム森林はかなり簡単で理解しやすい方法であり、彼の基本原理は、元のデータセットから戻されたサンプリングからいくつかのサブセットを獲得し、サブセットごとに異なるベース分類器を訓練し、ベース分類器の投票を通じて最終的な分類結果を得ることである.ランダム森林はセルフサンプリング法(bootstrap)を用いて元のデータセットのサブセットを取得し、まずセルフサンプリング法を理解することはランダム森林をよりよく理解するのに役立つ.
セルフサンプリング
m個のサンプルを含むデータセットDが与えられ、我々はそれをサンプリングしてデータセットD’D’を生成する:毎回ランダムにD D Dからサンプルを選択し、それをコピーしてD’D’に入れ、その後、そのサンプルを初期データセットDに戻し、次回のサンプリングでサンプルが採取される可能性がある.このプロセスをm回繰り返し実行すると,m個のサンプルを含むデータセットD’D’が得られ,これがセルフサンプリングの結果である.明らかに、D Dの一部のサンプルはD’D’に複数回現れるが、他の一部のサンプルは現れない.簡単な推定を行うことができ、サンプルがmサブサンプリングにおいて常に採られない確率は(1−1/m)m(1−1/m)m(1−1/m)mであり、この式の限界をとると1/e=0.368 1/e=0.368となる.すなわち、セルフサンプリングにより、初期データセットDの約36.8%のサンプルがデータセットD’D’に現れず、D’D’をトレーニングセットとして使用することができる.残りはテストセットとして
セルフサンプリング法に基づくランダム森林の構築過程は以下の通りである.
  • 元の訓練セットからBootstraping法を用いてランダムにサンプリングを戻してm個のサンプルを選択し、n_treeサブサンプリング、n_の生成tree個訓練セット
  • n_についてtree個の訓練セット、私たちはそれぞれn_を訓練しますtree個の決定ツリーモデル
  • 単一決定ツリーモデルについて、訓練サンプルの特徴の個数がnであると仮定すると、各分裂時に情報利得/情報利得比/キニー指数に基づいて最良の特徴を選択して分裂
  • を行う.
  • 各木は、ノードのすべての訓練サンプルが同じクラスに属するまで、このように分裂し続けた.決定木の分裂過程において枝を切る必要はない
  • は、生成された複数の決定木をランダムな森に構成する.分類問題については、複数の木分類器の投票によって最終分類結果を決定する.回帰問題については、複数の木の予測値の平均値によって最終予測結果
  • が決定する.
    また、ランダム森林はサンプルだけでなく、属性もサンプリングします.すなわち、縦横サンプリングですが、属性のサンプリングはセルフサンプリング法ではなく、単純に一定の割合でランダムサンプリングします.
    では、ランダム森林はどのように特徴選択を行っているのでしょうか.
    ランダム森林の特徴選択
    特徴の選択を行うには、既存の特徴の良し悪しに対するメトリックが必要です.まず、ランダム森林がどのように特徴の良し悪しを測定しているのかを見てみましょう.それから、どのように特徴の選択を行っているのかを見てみましょう.
    特徴善し悪し測定
  • は、各決定木について、対応する袋外データ(out of bag,OOB)を選択して袋外データ誤差を算出するerrOOB 1とする.袋外データとは,決定ツリーを構築するたびに,繰り返しサンプリングにより決定ツリーを訓練するためのデータが得られ,このとき約1/3のデータが利用されず,決定ツリーの構築に関与していないことを意味する.この部分のデータは,決定ツリーの性能を評価し,モデルの予測誤り率を計算するために用いることができ,袋外データ誤差と呼ぶ.
  • 袋外データOOBのすべてのサンプルの特徴Xにノイズ干渉(特徴Xでのサンプルの値をランダムに変更できる)をランダムに加え、errOOB 2として袋外データ誤差を再計算した.
  • 森林にN本の木があると仮定すると,特徴Xの重要性=Σ(errOOB 2−errOOB 1)/Nである.この数値が特徴の重要性を説明できるのは,ランダムノイズを加えると袋外データの精度が大幅に低下(すなわちerrOOB 2が上昇)し,この特徴が試料の予測結果に大きな影響を及ぼすことを示し,さらに重要度が高いことを示しているからである.

  • フィーチャーの選択
    フィーチャーの重要性に基づいて、フィーチャー選択の手順は次のとおりです.
  • 各特徴の重要性を計算し、
  • を降順に並べ替える.
  • は、除去する割合を決定し、特徴の重要性に基づいて対応する割合の特徴を除去し、新しい特徴セット
  • を得る.
  • は、残りのm個の特徴(mは予め設定値)
  • まで、新しい特徴セットで上述の手順を繰り返す.
  • は、上記の過程で得る各特徴セットと特徴セットに対応する袋外誤差率に基づいて、袋外誤差率が最も低い特徴セット
  • を選択する.
    sklearnのランダムな森
    sklearnのランダム森林ライブラリ関数がどのように使用されているかを見てみましょう
    from sklearn.ensemble import RandomForestClassifier #   
    
    print("DecisionTreesClassifier")
    
    clf1 = RandomForestClassifier(n_estimators = 100) #  100     
    clf1.fit(traindata,trainlabel)
    res = clf1.predict(testdata)
    from sklearn.ensemble import RandomForestRegressor #   
    
    print("DecisionTreesRegressor")
    
    clf1 = RandomForestRegressor(n_estimators = 100) #  100     
    clf1.fit(traindata,trainlabel)
    res = clf1.predict(testdata)

    参考文献
    [1] Breiman L. Random Forest[J]. Machine Learning, 2001, 45:5-32.