#はじめに
決定木の基本的な概念を理解できた。ポイントは、分割する際に発生する「不純度」の評価。
評価関数として、「ジニ指数」、「交差エントロピー」があり、その評価関数を使い、「不純度」がゼロに近づくように分類する。
Nm個の観測値を持つ領域Rmにおけるクラスkの観測値の割合を次のように書く。
$$\hat{P}mk =1/N_m\sum_{x_i\in R_i}I(y_i = k)$$
- ジニ指数(微分可能)
$$1 -\sum_{k=1}^K\hat{P}_mk^2$$
- 交差エントロピー(微分可能)
$$- \sum_{k+1}^K\hat{P}mk\log\hat{P}mk$$
また、決定木は、分類の他に回帰問題にも使え、その適応は次の式となる。
回帰問題の場合、コスト関数を以下のように定義する。
$$\hat{c}mk =1/N_m\sum_{x_i\in R_i}y_i$$
$$Q_m(T) =1/N_m\sum_{x_i\in R_i}(y_i - \hat{c}_m)^2$$
簡単に、言うとコストの平均と予測値の最小二乗を取り、それが最小になるようにする。
アンサンブル学習とは?
複数の学習器を組み合わせ、より良い予測を得ようとするテークニック。単一のモデルを単独で使うよりもたいていの場合良い結果が得られる。具体的には、複数の予測器の予測値の「平均を取る」、もしくは「多数決をとる」などの処理で組み合わせる。近年、データ分析の現場で注目されている「ブースティング」「ランダムフォレスト」などもアンサンブル学習の一種。
バギング(ブートストラップ集約)
「複数の学習器(予測器)を組み合わせる」と言っても、同じデータを使って同じアルゴリズムで学習を行ったモデルを組み合わせても意味はない。とは言え、普通データは1つしか存在しない。そこで、「ブートストラップ」と呼ばれるテクニックを使う。訓練データからランダムに(重複ありで)n個のデータをサンプリングする。
###バンピング
複数の予測器の中から最も当てはまりの良いモデルを探すための手法。ブートストラップデータ集合を使ってN個のモデルを生成し、それらをもとの訓練データに当てはめ、予測誤差を最小にするモデルを最良のモデルとして選ぶ。バギング、スタッキングに比べ、一見メリットのないような手法だが、質の悪いデータを用いて望ましくない解が得られてしまった時、それらのデータを除いたブートストラップデータ集合によって、より良い解が得られることがある。
ランダムフォレスト
ランダムフォレストは、前述の「バギング」のベース学習器として「決定木」を用いた手法。具体的なアルゴリズムは以下の通り、
- 訓練データからN個のブートストラップデータ集合を取り出す
- これらのデータを使ってN個の木 T を生成する.このときp個の特徴量からm個だけをランダムに選ぶ。
- 回帰の場合は平均を、分類の場合は多数決を取って最終的な予測値とする。
なぜベース学習器に決定木を用いるのか?
バギングの基本的な考え方は、分散大・バイアス小のモデルを複数組み合わせて誤差を減らすこと。
- 分散大・バイアスト → 複雑なモデル (ex. 決定木、最近傍法)
- 分散小・バイアス大 → 単純なモデル (ex. 線形回帰)
決定木は、バギングのベース学習器としては理想的な分散大・バイアス小のモデル。その他、「高速である」、「変数のデータ型を問わない」、「スケーリングに対して不変」などのメリットがある。
なぜ一部の特徴量だけしか使わないのか?
アンサンブル学習においては、モデル間の相関が低ければ低いほど最終的な予測値の精度は高まる。同じようなモデルをいくつも集めても意味はなく、異なったデータで学習したモデルを組み合わせたほうが性能が高い。ブートストラップに加え、それぞれのモデルで学習に使う変数を変えることでモデル間の相関を低くする。
ブースティングとは?
「ブースティング」は、アンサンブル学習の手法の1つ。ベース学習器を逐次的に訓練する。
AdaBoost(アダブースト)
各学習器の訓練で、重み付けられたデータ集合が利用される。前の学習器が誤分類したデータ点により大きな重みを与える。最初は全てに均等な重みを与える。それらのベース学習器の予測値を最後に結合して最終的な予測値とする。
勾配ブースティング
残差を使ったモデル。決定木は、over fitしてしまうので、前の結果の残差の勾配(微分)がゼロになるように、学習させて行く。(まだ、完全に理解できていない。)
Kaggle Masterが勾配ブースティングを解説する
https://qiita.com/woody_egg/items/232e982094cd3c80b3ee
Gradient Boostingについて調べたのでまとめる
https://www.st-hakky-blog.com/entry/2017/08/08/092031
最後に
決定木に関して、ググってみました。かなり理解が深まりましたので、今度はコードに起こして、さらに理解を深めたいと思います。
参考
機械学習】アンサンブル学習(前編)| バギング・スタッキング・バンピング、ランダムフォレスト
https://www.youtube.com/watch?v=0WcrBe017-w&list=PLS0ga_-CwEAryL5_Saiit6CIU1oZS7S4j&index=11