LoginSignup
29
42

More than 5 years have passed since last update.

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

Posted at

決定木 (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 の概要です。
日々更新していきますので、追加すべきところ、直すべきところありましたら、コメントいただけると幸いです。

29
42
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
42