A, B, C の3クラス分類としたとき、value はそのノードが表す領域内の各クラスのサンプル数を表しています。
例えば、value=[10, 30, 50] であった場合、その領域はAが10個、Bが30個、Cが50個あり、ラベルCのサンプルが最も多いので、多数決でそのノードはクラスCと判定します。
export_graphviz()
に class_names
でクラス名の一覧を指定すれば、直線そのノードが表すクラスが図にプロットされます。
python
1from IPython.display import Image, display
2from pygraphviz import AGraph
3from sklearn.datasets import load_iris
4from sklearn.tree import DecisionTreeClassifier, export_graphviz
5
6iris = load_iris()
7print(iris.target_names)
8
9# 決定木の学習を行う。
10clf = DecisionTreeClassifier(max_depth=2).fit(iris.data, iris.target)
11
12# 学習済みの DecisionTreeClassifier オブジェクトが表す決定木を dot 形式で出力する。
13dot = export_graphviz(
14 clf, feature_names=iris.feature_names, class_names=iris.target_names
15)
16
17A = AGraph(dot) # graphviz が必要
18png = A.draw(format="png", prog="dot")
19display(Image(png))
追記
追記
この場合分岐をしなくてもクラス1に分類されると思うのですが、なぜわざわざ分岐をさせていくのでしょうか?
「分岐をしなくてもクラス1で分類されることには変わらななかったので、分岐しなくてもよかったのではないか」というのは結果論です。
質問の決定木を DecisionTreeClassifier で作成した際に max_depth=3 で深さ (条件分岐の数) を指定しませんでいしたか?
そのように指定した場合、決定木を作成する際は深さ3までは条件分岐を行います。
結果として、条件分岐してもしなくても変わらなかったケースは出てきます。
決定木分析についてざっくりまとめ_理論編 | Developers.IO
※ ちなみに一番右端のノードが深さ2で止まっているのは、所属するサンプルが全部同じクラスの場合はそこで分岐をストップするという処理があるためです。
sklearn.tree.DecisionTreeClassifier — scikit-learn 0.23.1 documentation
max_depth
The maximum depth of the tree. If None, then nodes are expanded until all leaves are pure or until all leaves contain less than min_samples_split samples.
訳
木の最大の深さ
None の場合、すべての葉が「純粋な状態 (pure)になる」か「所属するサンプル数が min_samples_split 未満」になるまで、分岐します。
純粋な状態というのはその葉に属するサンプルが全部1つのクラスに属する場合です。
ちなみに木、葉、ノード、深さといった単語はグラフ理論の木 から来ています。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/28 04:10
2020/06/28 04:26 編集
2020/07/01 06:33
2020/07/01 08:18
2020/07/01 08:33