1

.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

+0

シッキーではないと思います。 LightBGMやWekaやRのようなカテゴリデータをそのまま扱える他のライブラリを試すことができます –

答えて

0

のような決定木の可視化を作成することが方法ですそれはちょうどワンホットエンコーディングを使用する代わりのカテゴリのいくつかの任意の整数コードを使用しないように、おそらく簡単です特定の機能。

pandas.factorizeを使用して、カテゴリ変数を整数コードすることができます。

+0

どうすればそれについて考えなかったでしょうか? :/それは整数ではなく、整数を与える.. –

関連する問題