質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Q&A

解決済

1回答

2271閲覧

決定木による分類でどのクラスにあてはまるのか?

melo_yuya

総合スコア16

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

0グッド

0クリップ

投稿2020/06/28 03:22

#はじめに
決定木アルゴリズムによる3クラスの分類を行いました。使用した環境はSpyderです。
##分類結果
以下の図のような決定木が作成されました。左側からクラス1、クラス2、クラス3とします。
イメージ説明
この場合3段目の1番左側での分岐では、どちらもクラス1が最も多くなってしまいました。

###どのクラスに分類?
この場合どちらもクラス1に分類されたとしていいのでしょうか?それとも左側をクラス2、右側をクラス1とすればいいのでしょうか?

###終わりに
機械学習の勉強がまだまだ未熟な者で申し訳ございませんが、どなたかご回答いただけると嬉しいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

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 03:43

編集2020/07/01 08:35
tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

melo_yuya

2020/06/28 04:10

ご回答ありがとうございます。それでは今回の例では3段目の分類を行っているが、どちらもクラス1に分類されるという理解でいいのでしょうか?
tiitoi

2020/06/28 04:26 編集

3段目の一番左下2つはどちらもクラス1に分類されます。 決定木の図の見方ですが、サンプルが与えられたとき、各ノード (□のこと) の条件に従って、あみだくじのように辿っていくと、一番下のどれかのノードにたどり着くと思います。そのノードの value = [A, B, C] の3つの数の一番数が多いクラスが予測ラベルとなります。 例えば、一番左下のノードにたどり着いた場合、value=[27, 18, 4] でクラス1が一番多いので、予測ラベルはクラス1となります。
melo_yuya

2020/07/01 06:33

ご回答ありがとうございます。 決定木に関する理解が深まりました。
melo_yuya

2020/07/01 08:18

追加で質問になって申し訳ありません。 この場合分岐をしなくてもクラス1に分類されると思うのですが、なぜわざわざ分岐をさせていくのでしょうか?
tiitoi

2020/07/01 08:33

追記しました。確かに分岐しなかったでも予測クラスは変わらないですが、それは結果論です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問