分類アルゴリズム~決定木①~

こんにちは!EMです^^

 

さっそく今日も分類アルゴリズムシリーズをはじめていきたいと思います。

今日のテーマは「決定木」です!

 

 

決定木(Decision Trees)

決定木はイメージしやすいかもしれません。

例えば、10個ほどの質問をして、答えにたどり着くタイプの質問がよく
身近に目にするかと思います。

例えば、回答者は人や物や場所などについて考え、yesまたはnoで答えていきます。

そしてその導かれる答えによって、最終的な回答を予想していきます。

問題を進めていくほど、その回答によって考えられうる解決策を
狭めていく事ができます。

例をいうと「これは動物ですか?」という質問に「はい」と答え
「4本の足がありますか?」の答えが「いいえ」だった場合。

これは明らかに豚、羊、牛、犬などの4足歩行の動物は削除する事が出来ますよね。

この様に、最終的にはうまく答えにたどり着くという流れです。

 

f:id:tennisfashionista:20210212011738p:plain

決定木の木はノード(◇の結び目の部分)で構成され
一番上のノードをルートノード(根っこのノード)と言います。
各ノードは属性のテストを表します。

例えば、「色は『赤』」や「重量は『10kg未満』ですか?」などの質問が
各ノードに入ります。

 

さらに決定木は、階層モデルの例です。

木がもつ各ノードは、情報を蓄積しており、上からの情報を下に流しています。

 

一番下の先のないノードの事をリーフノード(木の葉っぱのイメージ)と言います。

リーフノードにたどり着くと、私たちは決定を下したり、結果を得る事が出来ます。

最終的にたどり着いたリーフノードは、その中から一番可能性の高い決定・結果を
表しています。

 

一般的に、決定木は元の特徴(feature)タイプに影響されません。

継続的な特徴である場合、自由に値を分割できます。

もし独立変数が連続的な特徴値 Xを持っている場合、分割は値 V で行うことができ
Xi≤V が左の枝になり、すべての値Xi≥Vが右側の枝になります。

分離した特徴には、クラス値で分割できます。

treeパッケージを使用して、決定木を構築してみましょう。

 

from sklearn import tree
 
#fitting the DT
DT_model = tree.DecisionTreeClassifier()
DT_model.fit(df[features_to_include], df['Churn'])

DT_model.score(df[features_to_include], df['Churn'])
 
【output】
0.9974442709072838
 
 
DT_model_2feat = tree.DecisionTreeClassifier()
DT_model_2feat.fit(df[two_features], df['Churn'])
PlotBoundaries(DT_model_2feat, df[two_features].values, df['Churn']) 
 

f:id:tennisfashionista:20210213002950p:plain

 

2つの特徴の境界プロット(上の図)から見ての通り、決定木は過学習をする傾向があります。

ここでも、私たちが作ったデータと同じもので仮説を検証するべきではないので
テスト/トレーニングデータを使用してみましょう。

DT_model = tree.DecisionTreeClassifier()
DT_model.fit(X_trn[features_to_include], Y_trn)

print('accuracy on training data',DT_model.score(X_trn[features_to_include], Y_trn))
print('accuracy on test data',DT_model.score(X_tst[features_to_include], Y_tst))
 
【output】
accuracy on training data 0.9978698224852071
accuracy on test data 0.7331440738112136
 
 
目に見えないデータ(テストデータ)を使用すると
精度が一気に低くなった事に気づきましたでしょうか。
これは先程の通り、トレーニングデータ上で過学習をしている可能性が高いというサインです。
 
 
次回では正則化(regularization)を通じて、過学習をしてしまった際に
どのように決定木を改善していくのかを見ていこうと思います!
 
 
もしブログでは情報が足りない、、という方は
ぜひリクエストやコメントをお待ちしております。
また本格的に学びたい!という方は、ぜひプロにしっかり学ぶというのも
1番効率がいいのは間違いありません。
時間を無駄にしたくないという方は、ぜひ無料体験等で一度
どのように学べるのか試してみてくださいね^^
 
 
 
 
それでは次回もお楽しみに~!!