機械学習

決定木

こんにちは!

有名な機械学習手法の一つに決定木があります!

今回はそんな決定木について見ていきましょう~!

決定木とは

決定木っていうのはその名の通り木構造でデータ分類していく手法で、そこそこの精度と結果の視認性から実務の場で良く用いられています!

非常に簡易的ですが、会員か非会員かどうかを多くの変数で判断するような判別を行うとします。その時、まずは性別のよる影響が強いようなので性別で分類、続いて年齢による影響が強いようなので年齢で分類・・・

このように木構造が下に伸びていって分類することができます。

分類された箱をノードと呼びます。そしてもうこれ以上分類されない最後のノードをターミナルノードと呼びます。この図の例だと、男性・子供・大人がターミナルノードですね。

もっと一般的な例で考えてみましょう!

こんな感じ!この例は3つのカテゴリー質的変数をX,Yの説明変数を用いて上手く分類している例です!

こんな感じで分類したあとに視覚的にどんな変数が一番分類に効いているのかなどが分かりやすいのが特徴です!

CARTのアルゴリズム

それでは、そんな決定木のアルゴリズムを見ていきましょう!決定木のアルゴリズムはいくつかあるんですが、最も有名なのがCART!

以下は元田先生らが書いたデータマイニングの基礎を参考にします。

CARTは決定木の数あるアルゴリズムの中でも最も良く使われる手法であり、L.Breimanらによって1970年代初めごろから研究が始められ、1980年代の前半に公開されたアルゴリズムです。

CARTは目的変数を最も効果的に分類できるように、 Gini係数という指標を用いて分岐を行います。

Gini係数はクラスの偏り具合を表す指標であり、不純度と表現されます。特定のクラスのデータばかりであるほど0に近く、どのクラスも均等に存在する場合に大きな値を取る性質を持ちます。

Gini係数は以下の式で表され、この値は小さければ小さいほど良いということが分かっています。

\(GINI(t)=1-\displaystyle \sum_{ j = 1 }^{ k } p^2{(j|t)}\)

この時、\(p{(j|t)}\)はノードt内のクラスjの割合を示します。

(参考:データマイニングの基礎 (IT Text))

 

Gini係数を計算後、親ノードと子ノードのGini係数の差が大きいものを分岐の条件として選びます。

そして分割できなくなるまで続けていき、最終的にそれぞれのデータが属するノードのことをターミナルノードと呼びます。

 

決定木を用いた解析

それでは、早速決定木を用いた解析を行ってみましょう!

データはなんでも良いんですが、簡易的にRにデフォルトで入っているirisデータを使いましょう!あやめの種類を分類したデータで目的変数は3カテゴリーの質的変数、説明変数は花びらの幅とか4つです。

サンプルは150個で、分類しやすいデータなのでどんな手法でも割と簡単に分類できるんですが、どうなるでしょう!

今回は決定木以外にランダムフォレストとSVMとニューラルネットワークで比較しました。

ランダムフォレスト
 pred.forest  setosa versicolor virginica
##   setosa         29          0         0
##   versicolor      0         25         1
##   virginica       0          2        18
決定木
pred.cart    setosa versicolor virginica
##   setosa         29          0         0
##   versicolor      0         26         3
##   virginica       0          1        16
SVM
pred.svm     setosa versicolor virginica
##   setosa         29          0         0
##   versicolor      0         25         1
##   virginica       0          2        18
ニューラルネット
 pred.nn      setosa versicolor virginica
##   setosa         29          0         0
##   versicolor      0         25         2
##   virginica       0          2        17

 

結果はこんな感じになりました!

どれもいい感じに分類できてますね~!

本来は何回かシミュレーションやって誤判別率の平均取った方がいいんですが、それはまた別の記事で!

決定木に関しては以下の書籍を読むといい感じに載っていますので読んでみると良いでしょう!