決定木についてのメモ
これはメモ
- 仕事ではじめる機械学習
- jupyter notebookで決定木の可視化を行う - Qiita
- scikit-learn で決定木分析 (CART 法) – Python でデータサイエンス
- scikit-learn に付属しているデータセット – Python でデータサイエンス
- scikit-learnのtrain_test_splitで訓練データとテストデータを分割する - 今日も窓辺でプログラム
決定木の特徴
長所
- 学習したモデルを人間が見て解釈しやすい
→ 可視化しやすい、説明がしやすい
- 入力データの正則化が不要
→ 始めやすい。「今あるデータをとりあえず分類してみる」という始め方が出来る
- カテゴリ変数やその欠損値(計測漏れなどで値が存在しない)などを入力しても内部で処理してくれる
短所
- 特定の条件下では過学習しやすい傾向にある
→ 学習データにフィットしすぎて、汎用性に欠く、テストデータで性能を発揮できない場合がある
- 非線形分離可能だが、線形分離可能な問題は不得意
→ ???
- クラスごとのデータ数に偏りのあるデータは不得意
→ 例えば、異常検知とかは不得意そう(普通、異常値のデータの方が圧倒的に少ないので)
- データの小さな変化に対して結果が大きく変わりやすい
→ 例えば、昭和の小学生の身体測定のデータを学習データとしてモデルを作成し、平成の小学生の身体測定結果を分類しようとすると上手くいかなそう
- 予測性能はまずまず
→ ???
- バッチ学習でしか学習できない
何ができるの
if-thenのルールが作成できる。
e.g. 工場のセンサー値から製品の故障を予測したい場合に、どのセンサーが異常の原因7日といった、特定の分類結果に至った条件が必要とされる場合に有効
具体例
- e.g. (身体測定結果、新体力測定の結果を入力とした)男女の分類
- e.g.
分類木とは
Gini係数(Gini不純度)に関する補足
田屋さんの回(ランダムフォレスト)でも紹介された、ジニ係数について補足。
目的
決定木(の各特徴量の判定)の性能を評価する係数
概要
特定のルールに対して、分類した結果のグループの'キレイさ'を評価するイメージ
0 | ↔ | 1 |
---|---|---|
Gini係数が小さい | ↔ | Gini係数が大きい |
うまく分類が出来ている。いい特徴量 | ↔ | 分類が雑。(分類結果に色々なデータが混じっており、結局、大して分類できていない状態) |