[入門]決定木アルゴリズム

## はじめに
機械学習のコンペではlightbgmをはじめとする決定木をベースにしたモデルがめちゃくちゃよく使われていますよね。私も何度かコンペに参加しそれらのモデルのお世話になったわけですが、実際どういうモデルなのか何も知らないのは彼らに申し訳ない！！ということで調べてまとめることにしました。
決定木やランダムフォレスト、勾配ブースティングなどに関する詳細で素晴らしい記事はQiita上にすでにたくさんありますが、この記事はとりあえずざっくり、でも広範囲に決定木について学びたいと思っている人のために書こうと思います。※難しい数式などは出てきません！！

## 決定木とは？
決定木とは、クラス分類にも回帰タスクにも広く用いられているモデルです。クラス分類の場合目的変数には質的変数(male or femaleなど)をとり、回帰タスクの時は目的変数に量的変数(1.4,3.5など)を取ります。また、説明変数には質的変数も量的変数も取ることができます。

## 決定木の主な仕組み
決定木の学習では、Yes/Noで答えられる質問で構成された階層的な木構造を学習します。
#### クラス分類における決定木
分類タスクでよく使われる、irisデータセットを参考に、決定木の分類タスクについて説明します。
以下のようなirisの分布があるとします。
![スクリーンショット 2023-12-24 20.25.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3623947/de9056cb-5985-f394-891c-cbf0bad172d8.png)
この分布は、Petal lengthとPetal widthによって3つの領域に分けることができます。
![スクリーンショット 2023-12-24 20.12.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3623947/fdde0262-e19d-8a8a-ea4d-a70044c7420a.png)
これを、木として表すと以下のようになります。
![スクリーンショット 2023-12-24 20.16.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3623947/4958d41e-1105-a6ae-16f5-512f2fec71dc.png)

#### 回帰分析における決定木
以下のような握力の分布があるとします。
![スクリーンショット 2023-12-24 19.42.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3623947/001a4af9-4f5e-8329-6112-5333d53afcd1.png)
今回の回帰分析では、身長と体重という二つの特徴量を使ってモデルを学習させていきます。深さ2の木では、以下のようになります。
![スクリーンショット 2023-12-24 19.43.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3623947/0c7ee6c3-f3f9-1999-040f-263a8c24f211.png)
これを木として表すと、以下のようになります。
![スクリーンショット 2023-12-24 19.50.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3623947/6512556c-8472-0b97-bb45-718195e0654c.png)


## 決定木による特徴量の重要度の算出
決定木の学習により、特徴量の重要度を算出することができます。実際のコンペではこの重要度を見て特徴量を削減したり、重要な特徴量の欠損値を埋めたりします。この重要度は、分類をする際にそれぞれ特徴量がどれだけ分類に寄与しているかを評価する指標であり、ジニ不純度というものを用いて計算します。
詳しい計算は書きませんが、全ての特徴量の重要度の和は必ず1になります。
## 決定木を利用したモデル
決定木はそれ自体でも機械学習のモデルとして使うことができますが、現在は決定木を利用したより精度の高いモデルがよく使われています。これらは大きくランダムフォレストと、勾配ブースティングの2種類に分けられます。この二つのモデルの違いを理解するため、まずアンサンブル学習というものについて説明します。
### アンサンブル学習とは
アンサンブル学習とは、様々な予測モデルを作成して、最終的に一つの予測結果を出す手法のことです。このアンサンブル学習には、大きく分けてバギングとブースティングという手法があります。

(1) バギング
バギングとは、訓練データをブートストラップサンプリングすることで、訓練データのデータセットをいくつか作り、それぞれのモデルに学習させるものです。ブートストラップサンプリングとは、全データの中から復元抽出によりn個のデータをランダムに抽出することです。この時、過去に選択したデータも選択対象に含めるため、同じデータが何度も選ばれたり、一度も選ばれないデータがあったりします。また、次のモデルを作るとき、過去のモデルの情報は受け取らないため、学習中のモデル同士は互いに関与しません。

(2) ブースティング
対してブースティングでは、最初のモデルの学習を終えたら次のモデルで学習を始めます。この時、すでに学習が終わったモデルからデータの誤分類や、平均二乗誤差などの情報を受け取ってから次のモデルの学習を始めるので、学習が進むにつれてだんだんと精度が向上していきます。


### 決定木をバギングしたモデル 〜ランダムフォレスト〜
ランダムフォレストは、アンサンブルの手法としてバギングを使います。通常のバギングでは、行を復元抽出でランダムに選んでデータセットを作成しますが、ランダムフォレストではそれに加えて各ノードの分割条件を決めるときに利用する特徴量の列もランダムに選択します。


### 決定木をブースティングしたモデル 〜lightGBM~
ブースティングの手法にはXgboostや勾配ブースティング、アダブーストなどさまざまなものがありますが、よく機械学習で使われるモデルであるlightGBMには、勾配ブースティングというブースティングの手法が用いられています。
## まとめ
最後までお読みくださりありがとうございました！このようにブログやQiitaに記事を投稿するのは初めてで慣れていないかつ、文章を書くこともあまり得意ではないので大変読みにくい記事だったと思いますすみません...2023年度も残すところ１週間となりましたね！来年度は、Qiitaにたくさん記事を投稿することを目標にしていきたいと思います♪

## 参考文献

[決定木|株式会社アナリティクスデザインラボ](http://www.analyticsdlab.co.jp/column/decisiontree.html#:~:text=%E6%B1%BA%E5%AE%9A%E6%9C%A8%E3%81%AB%E3%81%AF%E5%88%86%E9%A1%9E,%E5%8F%96%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82)
[[機械学習]ランダムフォレストを理解する](https://qiita.com/Hawaii/items/5831e667723b66b46fba)
[決定木・ランダムフォレスト・勾配ブースティング①（make_moons)](https://qiita.com/y-sh-ml/items/a695a0f96c4643868c45)
[決定木分析をシンプルに理解する](https://qiita.com/H1dek1/items/72976f956d34d275d862#%E9%87%8D%E8%A6%81%E5%BA%A6%E3%81%AE%E8%A8%88%E7%AE%97)
[決定木(Deion Tree)を理解して文書分類を行う](https://qiita.com/g-k/items/9c1307274814d651752a)
須藤秋良.スッキリわかるPythonによる機械学習入門.株式会社インプレス.2020
Andreas C.Muller,Sarah Guido(著),中だ秀基(翻訳).Pythonではじめる
機械学習-scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎.オライリージャパン.2017