.csvファイルにはlinkがあります。これは、決定木を練習するのに使用できる古典的なデータセットです!ここでホットなコード化された機能から統合されたカテゴリ機能を使って、決定木(sklearn)を視覚化する方法はありますか?
import pandas as pd
import numpy as np
import scipy as sc
import scipy.stats
from math import log
import operator
df = pd.read_csv('tennis.csv')
target = df['play']
target.columns = ['play']
features_dataframe = df.loc[:, df.columns != 'play']
は
Index(['windy', 'outlook_overcast', 'outlook_rainy', 'outlook_sunny',
'temp_cool', 'temp_hot', 'temp_mild', 'humidity_high',
'humidity_normal'],
dtype='object')
を返し、私の頭痛は
features_dataframe = pd.get_dummies(features_dataframe)
features_dataframe.columns
を開始する場所、私はすべてのカテゴリと、それを印刷しているfeatures_dataframe
に保存されている私の機能(データ)の列に1つのホット符号化を行うよです
なぜワンホットエンコーディングを実行する必要があるのですか? sklearnは、カテゴリに属する列では機能しません。
from sklearn import preprocessing
le = preprocessing.LabelEncoder()
le.fit(target.values)
k = le.transform(target.values)
sklearnはカテゴリでは動作しませんので、上記のコードは、整数に基本的にバイナリクラスラベルを持つtarget
に保存されている私のターゲット列(「はい」と「いいえ」)を変換する(YAY!)
そして最後に、DecisionTreeClassifierをフィッティングして、criterion = "entropy"
は私がID3の概念を使用していると仮定しています!
from sklearn import tree
from os import system
dtree = tree.DecisionTreeClassifier(criterion = "entropy")
dtree = dtree.fit(features_dataframe, k)
dotfile = open("id3.dot", 'w')
tree.export_graphviz(dtree, out_file = dotfile, feature_names = features_dataframe.columns)
dotfile.close()
ファイルid3.dot
は適切に理解可視化に有向グラフコードを変換するには、このsiteに貼り付けることができ、必要なコードを持っています!
あなたが効果的かつ簡単に私を助けるために、私はid3.dot
のコードをここに掲載します!
digraph Tree {
node [shape=box] ;
0 [label="outlook_overcast <= 0.5\nentropy = 0.94\nsamples = 14\nvalue = [5, 9]"] ;
1 [label="humidity_high <= 0.5\nentropy = 1.0\nsamples = 10\nvalue = [5, 5]"] ;
0 -> 1 [labeldistance=2.5, labelangle=45, headlabel="True"] ;
2 [label="windy <= 0.5\nentropy = 0.722\nsamples = 5\nvalue = [1, 4]"] ;
1 -> 2 ;
3 [label="entropy = 0.0\nsamples = 3\nvalue = [0, 3]"] ;
2 -> 3 ;
4 [label="outlook_rainy <= 0.5\nentropy = 1.0\nsamples = 2\nvalue = [1, 1]"] ;
2 -> 4 ;
5 [label="entropy = 0.0\nsamples = 1\nvalue = [0, 1]"] ;
4 -> 5 ;
6 [label="entropy = 0.0\nsamples = 1\nvalue = [1, 0]"] ;
4 -> 6 ;
7 [label="outlook_sunny <= 0.5\nentropy = 0.722\nsamples = 5\nvalue = [4, 1]"] ;
1 -> 7 ;
8 [label="windy <= 0.5\nentropy = 1.0\nsamples = 2\nvalue = [1, 1]"] ;
7 -> 8 ;
9 [label="entropy = 0.0\nsamples = 1\nvalue = [0, 1]"] ;
8 -> 9 ;
10 [label="entropy = 0.0\nsamples = 1\nvalue = [1, 0]"] ;
8 -> 10 ;
11 [label="entropy = 0.0\nsamples = 3\nvalue = [3, 0]"] ;
7 -> 11 ;
12 [label="entropy = 0.0\nsamples = 4\nvalue = [0, 4]"] ;
0 -> 12 [labeldistance=2.5, labelangle=-45, headlabel="False"] ;
}
ゴーhere、および作成した決定木の適切な可視化を得るために、上記の有向グラフのコードを貼り付け!ここで問題となるのは、大きなツリーや大きなデータセットの場合、ノードスプリットを表す機能名として表示されるホットエンコードされた機能のため、解釈が難しいことです。
意思決定ツリーの視覚化でワンホットエンコードされたフィーチャのノード分割を表す統合フィーチャ名が表示されます。
が、私はこれで何を意味、this
シッキーではないと思います。 LightBGMやWekaやRのようなカテゴリデータをそのまま扱える他のライブラリを試すことができます –