3

私はgraphvizを使用して分類決定木をプロットしています。

機能に合わせる前に、「preprocessing.StandardScaler()」を使用してそれらをスケーリングします

したがって、決定木をプロットすると、「変換された値」に基づいてプロットされます

デシジョン ツリーが変換された値ではなく、ノードの実際の値をプロットするように、それをプロットする前に分類器を「inverse_trasform」する方法はありますか?

はい、私は scale.inverse_transform(rf_clf) を試しました ....しかし、もちろん、do' work...

sklearn.datasets からデータセットをインポートする

iris = datasets.load_iris()

ディクショナリからデータ フレームを作成する

species = [iris.target_names[x] for x in iris.target]
iris = pd.DataFrame(iris['data'], columns = ['Sepal_Length', 'Sepal_Width', 'Petal_Length', 'Petal_Width'])
iris['Species'] = species

配列への変換

Features = np.array(iris[['Sepal_Length', 'Sepal_Width', 'Petal_Length', 'Petal_Width']])

levels = {'setosa':0, 'versicolor':1, 'virginica':2}
Labels =  np.array([levels[x] for x in iris['Species']])

分割

nr.seed(1115)
indx = range(Features.shape[0])
indx = ms.train_test_split(indx, test_size = 100)
X_train = Features[indx[0],:]
y_train = np.ravel(Labels[indx[0]])
X_test = Features[indx[1],:]
y_test = np.ravel(Labels[indx[1]])

スケーリング:

scale = preprocessing.StandardScaler()
scale.fit(X_train)
X_train = scale.transform(X_train)

分類器のフィッティング

rf_clf = tree.DecisionTreeClassifier() ###simple TREE
rf_clf.fit(X_train, y_train)*

graphviz を使用して決定木をプロットする:

dot_data = tree.export_graphviz(rf_clf, out_file=None, 

             feature_names=['Sepal_Length', 'Sepal_Width', 'Petal_Length', 'Petal_Width'], 
             class_names=['setosa', 'versicolor', 'virginica'], 

                 filled=True, rounded=True,  
                 special_characters=True)

print(dot_data)

graph = graphviz.Source(dot_data)  
graph 

最初のノードの結果は "Petal_width<= 0.53" で、2 番目のノードは "petal length <= -0.788" で、実数の負の数値です。

インチで実際の値が表示されているツリーを使用したいのですが...

4

1 に答える 1