Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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 ルートノードから 情報ゲインを再帰的に ⾜し合わせていく

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

6 Thank you