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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2222閲覧

pythonで実装する決定木分析の構造情報の把握

shunta.u

総合スコア9

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/06/12 14:46

閲覧ありがとうございます。
質問させていただくのは初めてですのでわかりにくいところがあるかもしれませんが、よろしくお願いします。

現在pythonにて決定木分析を行い、そこから得られる情報を利用するプログラムの作成を目指しています。
scikit-learnを用いることで決定木分析自体は行うことができるのですが、そこから作成したツリーから情報を得るということが全くできず、アドバイスやヒントをいただきたいという状況です。

対象のデータの詳細や得たい情報について以下にまとめていきます。
対象となるデータはある製品が不良品であるか、良品であるかということとその製品一つ一つに行われた製品テストの結果から成ります。
決定木分析は良品であるか不良品であるかをクラスに、複数あるテスト項目の結果を特徴量として製品データを分類することになります。
このようにして作成したツリーは以下のようになり、例えば赤い丸で囲まれたところに分類された製品は
TEST46で2.98以上の値を記録し、TEST65で0.59以下の値を記録したものとなります。
イメージ説明

質問のテーマであるツリーの構造情報というのはこのようにして作成されたツリーにおいて、
最終要素に分類されたデータがどの特徴量(テスト項目)を利用しているのか、という情報になります。
例えば赤い丸で囲まれた要素に分類されたデータは、上に上にたどっていくことで得られるTEST65、TEST46という複数の特徴量が分類に必要な構造情報ということになります。

最初はツリーをテキスト化し、エクセル上でソートしたりすることでどうにかしていたのですが、
ツリーを複数作成することが前提であり、やはりpython上で行いたいと思っています。

このような情報をpython上で得る方法を探しているのですが、なにか良い方法はないでしょうか
よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

sklearn.tree.DecisionTreeClassifier.decision_path

Python

1# -*- coding: utf-8 -*- 2import numpy as np 3from sklearn.datasets import load_iris 4from sklearn.tree import DecisionTreeClassifier, export_graphviz 5 6 7def main() -> None: 8 iris = load_iris() 9 clf = DecisionTreeClassifier(random_state=0) 10 clf.fit(iris.data, iris.target) 11 12 # sepal length, sepal width, petal length, petal width 13 X = np.array([[5.0, 2.9, 1.0, 4.85]]) 14 #X = np.array([[5.0, 2.9, 1.0, 0.2]]) 15 print(clf.predict(X)) 16 print(clf.decision_path(X)) 17 print(clf.decision_path(X).todense()) 18 with open('iris-dtree.dot', mode='w') as f: 19 export_graphviz(clf, out_file=f, 20 rounded=True, 21 feature_names=iris.feature_names, 22 class_names=iris.target_names, 23 special_characters=True) 24 25 26if __name__ == '__main__': 27 main() 28

◇参考情報
using-decision-path-in-decision-tree-in-python

投稿2018/06/12 16:08

umyu

総合スコア5846

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

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

shunta.u

2018/06/12 20:46

回答ありがとうございます! これはアイリスデータセットからツリーを作成して新たなデータXを用意したとき、 どのノードを通るかを返す形になっているという理解でよろしいでしょうか? たしかにdecision_pathを用いてどのノードを通るのかというのはわかるのですが、 今回知りたいこととしてはそのノードがどの特徴量を利用しているのかでして、pathと何かを組み合わせることでそういった情報を得ることはできますでしょうか?
umyu

2018/06/13 02:06 編集

>shunta.uさんへ >どのノードを通るかを返す形 はい、その認識でOKです。 このプログラムは2つの事をやっています。 1,アイリスデータ・セットからツリーを形成して、データXの決定パス(ツリーを通った道を)表示。 2,ツリーの「特微量の判断条件」をexport_graphvizでDOTファイルとして生成。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問