DAY27

12906 ワード

ランダムツリー


ランダムツリーモデルは、複数の決定ツリーを「並列」として学習することによって、各結果値(多数に分類され、平均に回帰)を統計し、最終予測値を返します.
画像ソース

コンビネーションメソッド


1つのデータを使用して複数のマシン学習モデル(弱いベース学習者、基本モデル)を作成し、これらのモデルの予測結果を多数または平均値で予測する方法.
  • コンビネーションモードにはbagging、boosting、stackingモードがあります.ランダム森林はbaggingモデル
  • に対応する
  • ランダムツリー基本モデルとして決定ツリーを用いた組合せ方法
  • ランダムツリーは、通常、決定ツリーよりもパフォーマンスが優れており、分類の問題であれば、ランダムツリー
  • が望ましい.

    ランダム森林の基本モデルを作成するにはどうすればいいですか?


    の組合せで使用される小さなモデルは、Bootstrappingというサンプリングプロセスによって得られるBootstrappingセットを用いて学習される.
  • の元のデータをサンプリングし、すなわち、還元抽出を行い、抽出サンプルを還元抽出し、値を記録し、その場に戻す、すなわち.
    -抽出されていないサンプルはOut-Of-bafサンプル=test sets
  • ガイドバーセットのサイズがnの場合、1回の抽出中にいずれのサンプルも抽出されない確率.
    n−1n\displaystyle\frac {n-1}{n}nn−1​
    n回の回復抽出を行う場合、そのサンプルが抽出されない確率
    (n−1n)n\displaystyle\left({\frac {n-1}{n}}\right)^{n}(nn−1​)n
    n無限大時
    lim⁡n→∞(1−1n)n=e−1=0.368\displaystyle\lim _{{n\to\infty }}\left({1 -\frac {1}{n}}\right)^{n} = e^{-1} = 0.368n→∞lim​(1−n1​)n=e−1=0.368
  • すなわち、1つのガイドバー群のサンプル数がサンプル数の63.2%であると仮定する
  • Out-Of-Bagサンプルは36.8%を占めた.
    ランダムツリーは、ベースモデルツリーを作成するときにランダムに選択したプロパティセットを使用します.
  • 決定ツリーにおいて分割に用いる特性を選択すると、全ての特性(n個)が考慮されて最適特性が選択する、
  • が分割される.
  • ランダムツリーは、n個の特性の一部であるk個の特性を選択(サンプリング)し、このk個の特性から最適な特性を探し出して分割する.k個は通常log 2 nを用いる
    画像ソース1
    画像ソース2
  • 基本モデル(弱い学習者、小さなモデルたち)はどのように組み合わせていますか?


    ガイドバーセットによって作成された基本モデルをマージするプロセスを集約と呼びます.
  • 回帰問題であれば、基本モデル結果の
  • が平均的に得られる.
  • 分類問題の場合、多くのモデルは
  • を選択します.

    パイプラインへのランダムエンベロープ

    from category_encoders import OneHotEncoder
    from sklearn.ensemble import RandomForestClassifier
    from sklearn.impute import SimpleImputer 
    from sklearn.pipeline import make_pipeline
    pipe = make_pipeline(
        OneHotEncoder(use_cat_names=True), 
        SimpleImputer(), 
        RandomForestClassifier(n_jobs=-1, random_state=10, oob_score=True) 
    )
    pipe.fit(X_train, y_train)
    print('검증 정확도: ', pipe.score(X_val, y_val))
    OOB精度
    pipe.named_steps['randomforestclassifier'].oob_score_

    oob score vs validation set score

  • oobは、ブート以来使用するデータから精度
  • をどのように取得するか.
  • 検証セットは、トレーニングデータから一部のデータセットを抽出した点
  • です.
  • OOBデータと比較すると、Validation Setではなく、より優れたデータである可能性が高い
    正式な書類
    ソース
  • ツリーコンビネーションモデルが決定ツリーモデルよりも適しているのはなぜですか?(2種)


    決定ツリーは、特定のデータと一致する傾向があります.
    異なるサンプリングデータを用いて過剰なツリーを作成し,平均範囲で結果を用いたモデルはランダムツリーであり,パフォーマンスを低減し維持できることを知った.
  • ランダムツリーで学習するツリーは、ジョギングによって作成され(bootstrap = true)、各基本ツリーで使用するデータ
  • をランダムに選択する.
    各ツリーは、ブランチを実行するためにランダムに選択された特性を有する(max_features = auto).

    シーヶンスコーディング


    シーケンスエンコーディング数値をカテゴリにマッピング
    例)[a,b,cの3つのカテゴリがある場合は->[1,2,3]として符号化する.
  • ノットの測定値は、指定したhandle missing=(この場合は-2)value属性からではなく、handle unknown属性から未知値(-1)の
  • を返します.
  • 数値型データを符号化しない

    正式な書類
  • 一次熱符号化vsシーケンス符号化


    ツリー構造では、重要なプロパティが最初に親ノードで分割されます.
    したがって,カテゴリタイプマルチ(高基数)の特性は,1つの熱符号化により親ノード上で選択される機会が少ない.
    数値特性は元の熱符号化の影響を受けず、親ノードを占有する機会が増加し、全体的なパフォーマンスが低下します.
  • シーケンス符号化は、高基数特性
  • も考慮することができる.
  • しかし、1つの熱符号化を用いる必要があるカテゴリデータにおいて順序データを用いることは、モデルの性能
  • に寄与しない.
  • OrdinalEncoderを使用してデータをランダムに符号化し、カテゴリを順序付きデジタルタイプに変換すると、元のカテゴリにない順序情報が生成される可能性があります.
    パン、ご飯=>パン-1、ご飯-2
  • しかし、ランダムツリーの場合、複数の決定ツリーを「並列」に学習することができるので、順序符号化
  • を用いることができる.

    比較基準森林属性の重要性(onehot vs ordinal)

  • 重要度ノードのGini不純物から計算すると、ノードが重要であるほど、不純度は
  • 大幅に減少する.
  • ノードは、1つの特性の値に基づいて分離するので、不一致を低減するための一般的な特性がより重要になる
  • .
    # 특성 중요도(onehot)
    rf = pipe.named_steps['randomforestclassifier']
    colnames = pipe.named_steps['onehotencoder'].get_feature_names()
    importances = pd.Series(rf.feature_importances_, colnames)
    # 특성 중요도(ordinal)
    rf_ord = pipe_ord.named_steps['randomforestclassifier']
    importances_ord = pd.Series(rf_ord.feature_importances_, X_train.columns)
    結果
  • onehotとシーケンス特性の重要度が異なる
  • N223


    GridSearchCV()

  • を試行するスーパーパラメータを指定すると、すべての組合せをクロス検証した後、パフォーマンスに最適なスーパーパラメータの組合せが見つかります.
  • 欠点は、
  • のスーパーパラメータ値が多くなると、長い時間がかかることである.
  • from sklearn.model_selection import GridSearchCV
    params = { 'n_estimators' : [10, 100],
               'max_depth' : [6, 8, 10, 12],
               'min_samples_leaf' : [8, 12, 18],
               'min_samples_split' : [8, 16, 20]
                }
    # RandomForestClassifier 객체 생성 후 GridSearchCV 수행
    pipe = RandomForestClassifier(random_state = 10, n_jobs = -1, oob_score=True)
    grid_cv = GridSearchCV(pipe, param_grid = params, cv = 3, n_jobs = -1)
    grid_cv.fit(X_train_imputed, y_train)
    print('최적 하이퍼 파라미터: ', grid_cv.best_params_)
    print('최고 예측 정확도: {:.4f}'.format(grid_cv.best_score_))
    ソース

    Count Encoding

  • カウントコードは、各カテゴリ値をデータセットの出現回数に変換する.
  • たとえば、「GB」の値が国のプロパティで10回表示された場合、「GB」は10に変更されます.
  • 数値型データは符号化されておらず、GBあたり10
    ソース