Help us understand the problem. What is going on with this article?

機械学習③ 決定木 (Decision Tree)のまとめ

More than 3 years have passed since last update.

決定木 (Decision Tree) のまとめ

What is 決定木 (Decision Tree) ?

決定木は、データに対して、次々と条件を定義していき、その一つ一つの条件に沿って分類していく方法です。下記の図で言うとウインドサーフィンをするかしないかを判断しようとしています。そこで最初に、風の強さでカテゴリ分けした後に、晴れているかどうかでカテゴリ分けをしています。

この右のモデルを決定木と言います。決定木では、左の図にもある通り、線形での分類を複数回行うことで分類します。

Screen Shot 2017-05-09 at 11.39.46.png
Extracted by 'Introduction to Machine Learning', Udacity

ちなみに決定木には、回帰と分類があるようですが、今回話すのは分類 (classifier) の方です。

default のコード

DecisionTreeClassifier(criterion='gini', splitter='best', max_depth=None, 
min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, 
max_features=None, random_state=None, max_leaf_nodes=None, 
min_impurity_split=1e-07, class_weight=None, presort=False)


決定木 (Decision Tree) 内の Parameter の説明

中身がたくさん入っていますね。主要なものだけ下記で説明していきます。

  • min_samples_split

min_samples_split = 2 とすると、その分岐先の値が2以上の場合は、まだ分岐を続けることになります。下記の図を見てみると、水色のマルで囲まれたところは、まだサンプルが2以上なので、分岐を続けます。しかし、サンプル数によっては、過学習になってしまう可能性が高いので、調整が必要です。
Screen Shot 2017-05-09 at 12.35.35.png
Extracted from 'Introduction to Machine Learning', Udacity

  • criterion

データの分割の方法を'gini' か 'entropy' で指定します。

'gini': あるk個目の分類先の不純度(gini係数)が低い方がいい。
'entropy':information gain を使い、一番効率的な条件を探る。
違いはあんまりないらしいけど、詳しく書かれているのはココココ

  • max_depth

これで過学習を防ぐために、決定木の深さの最大値を決め、制限する。

Decision Tree の可視化 (Iris set の場合)


from IPython.display import Image  
dot_data = tree.export_graphviz(clf, out_file=None, 
                     feature_names=iris.feature_names, 
                     class_names=iris.target_names,  
                     filled=True, rounded=True,  
                     special_characters=True)  
graph = pydotplus.graph_from_dot_data(dot_data)  
Image(graph.create_png())  

Screen Shot 2017-05-09 at 11.00.27.png

The image and the code are extracted from 'Sklearn document'

決定木の過学習を防ぐ方法

  • min_samples_leaf でツリーの最後に行き着くところの最小値を指定する。
  • max_depth でツリーの深さの制限をする。

Decision Tree の 良い点悪い点。

  • 良い点

他のアルゴリズムでは、データの正規化やダミー変数の作成などが必要なのに対して、Decision Tree では、カテゴリカルデータや数値データを扱えるの出前処理をほとんど必要としません。また、上記のように可視化できるので、非常に理解しやすいアルゴリズムであることがわかります。

  • 悪い点

過学習されやすい。
縦横の直線で、データを分類するので、軸に平行な境界線でデータを区切れないときは、うまく分類できない。

まとめ

以上が現在筆者のわかる範囲での Decision Tree の概要です。
日々更新していきますので、追加すべきところ、直すべきところありましたら、コメントいただけると幸いです。

kibinag0
Shopifyを使用したWEB制作会社に所属。あくまでも自分が後から見返す用なので、殴り書きみたいになっているところもありますが、ご了承ください。間違っているところ、直したほうがいいと思うところバシバシコメントお願いいたします。TOEIC 975
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした