$30 off During Our Annual Pro Sale. View Details »

特徴量の重要度計算を実装する ランダムフォレストを実装する

特徴量の重要度計算を実装する ランダムフォレストを実装する

More Decks by NearMeの技術発表資料です

Transcript

  1. 0
    特徴量の重要度計算を実装する
    ランダムフォレストを実装する
    2023-09-15 第60回NearMe技術勉強会
    Takuma Kakinoue

    View Slide

  2. 1
    今回の実装のコミット
    https://github.com/kakky-hacker/algorithm_sandbox/commit/8f466be9c1fae0d7
    bf3bc1bff1a5d1327e4a324d

    1

    View Slide

  3. 2
    Feature importanceの実装
    • Feature importance の2種類の定義
    • 分割に使われた回数(split)
    • 分割において得られた情報ゲインの総和(gain) ← こちらを採⽤
    class Node:

    def feature_importance(self, importance_value):
    if not self.is_leaf:
    importance_value[self.split_feature_index] += self.gain
    self.left_node.feature_importance(importance_value)
    self.right_node.feature_importance(importance_value)
    return importance_value
    ルートノードから
    情報ゲインを再帰的に
    ⾜し合わせていく

    View Slide

  4. 3
    ランダムフォレストの実装
    ● 実装としては決定⽊を並列にアンサンブルするだけ
    ● 既存の決定⽊の変更箇所(core.py)
    ○ 決定⽊で使⽤しない特徴量をマスク形式で⼊⼒に加える
    ● 新規実装(random_forest.py)
    ○ ランダムフォレストのメイン処理
    ■ 特徴量マスクをランダムに⽣成して決定⽊学習
    ■ 推論時は、各決定⽊の出⼒を多数決
    3

    View Slide

  5. 4
    Borutaの実装(途中)
    • Borutaとは
    • 特徴量選択⼿法の1つ
    • ランダムな特徴量(shadow feature)を⼊⼒に結合し、
    オリジナル特徴量とランダムな特徴量の重要度を⽐較する
    • 学習を100回⾏い、上記⽐較のt検定を実施し、
    真に重要なオリジナル特徴量を選択する
    4

    View Slide

  6. 5
    次回予告
    • ⾃作ランダムフォレストとscikit-learnのランダムフォレストの
    性能を⽐較する。
    • 勾配ブースティングを実装する。
    • ⾃動ハイパーパラメータチューニングを実装する。
    5

    View Slide

  7. 6
    Thank you

    View Slide