2012-05-13 12 views
9

sciki-learn'i kullanırken noob var, lütfen benimle birlikte ol.Bir karar ağacının görselleştirilmesi (örnek: scikit-öğrenmesi)

Ben örnek üzerinden gidiyordu: http://scikit-learn.org/stable/modules/tree.html#tree

>>> from sklearn.datasets import load_iris 
>>> from sklearn import tree 
>>> iris = load_iris() 
>>> clf = tree.DecisionTreeClassifier() 
>>> clf = clf.fit(iris.data, iris.target) 
>>> from StringIO import StringIO 
>>> out = StringIO() 
>>> out = tree.export_graphviz(clf, out_file=out) 

Görünüşe graphiz dosya kullanıma hazırdır.

Grafiği kullanarak ağacı nasıl çizebilirim? (örnek, ağacın nasıl çizildiğine dair ayrıntıya girmedi).

Örnek kod ve ipuçları memnuniyetle karşılanıyor!

Teşekkürler!


Güncelleme

Sana Hangi işletim sistemi çalıştırabilirim, Python 2.7.3

cevap

6

ubuntu 12.04 kullanıyorum? graphviz yüklü mü? Örnekte

, StringIO() nesne, verileri kontrol etmektir burada, tek yönlü graphviz verileri tutan: kaynağında gösteriyordu

... 
>>> print out.getvalue() 

digraph Tree { 
0 [label="X[2] <= 2.4500\nerror = 0.666667\nsamples = 150\nvalue = [ 50. 50. 50.]", shape="box"] ; 
1 [label="error = 0.0000\nsamples = 50\nvalue = [ 50. 0. 0.]", shape="box"] ; 
0 -> 1 ; 
2 [label="X[3] <= 1.7500\nerror = 0.5\nsamples = 100\nvalue = [ 0. 50. 50.]", shape="box"] ; 
0 -> 2 ; 
3 [label="X[2] <= 4.9500\nerror = 0.168038\nsamples = 54\nvalue = [ 0. 49. 5.]", shape="box"] ; 
2 -> 3 ; 
4 [label="X[3] <= 1.6500\nerror = 0.0407986\nsamples = 48\nvalue = [ 0. 47. 1.]", shape="box"] ; 
3 -> 4 ; 
5 [label="error = 0.0000\nsamples = 47\nvalue = [ 0. 47. 0.]", shape="box"] ; 
4 -> 5 ; 
6 [label="error = 0.0000\nsamples = 1\nvalue = [ 0. 0. 1.]", shape="box"] ; 
4 -> 6 ; 
7 [label="X[3] <= 1.5500\nerror = 0.444444\nsamples = 6\nvalue = [ 0. 2. 4.]", shape="box"] ; 
3 -> 7 ; 
8 [label="error = 0.0000\nsamples = 3\nvalue = [ 0. 0. 3.]", shape="box"] ; 
7 -> 8 ; 
9 [label="X[0] <= 6.9500\nerror = 0.444444\nsamples = 3\nvalue = [ 0. 2. 1.]", shape="box"] ; 
7 -> 9 ; 
10 [label="error = 0.0000\nsamples = 2\nvalue = [ 0. 2. 0.]", shape="box"] ; 
9 -> 10 ; 
11 [label="error = 0.0000\nsamples = 1\nvalue = [ 0. 0. 1.]", shape="box"] ; 
9 -> 11 ; 
12 [label="X[2] <= 4.8500\nerror = 0.0425331\nsamples = 46\nvalue = [ 0. 1. 45.]", shape="box"] ; 
2 -> 12 ; 
13 [label="X[0] <= 5.9500\nerror = 0.444444\nsamples = 3\nvalue = [ 0. 1. 2.]", shape="box"] ; 
12 -> 13 ; 
14 [label="error = 0.0000\nsamples = 1\nvalue = [ 0. 1. 0.]", shape="box"] ; 
13 -> 14 ; 
15 [label="error = 0.0000\nsamples = 2\nvalue = [ 0. 0. 2.]", shape="box"] ; 
13 -> 15 ; 
16 [label="error = 0.0000\nsamples = 43\nvalue = [ 0. 0. 43.]", shape="box"] ; 
12 -> 16 ; 
} 

sen .dot file olarak yazmak ve görüntü çıkışı üretebilir, bağlantılı:

$ dot -Tpng tree.dot -o tree.png (PNG biçimli çıktı)

+0

Merhaba teşekkürler! Ubuntu 12.04, Python sürüm 2.7.3 kullanıyorum. Komut satırında değil, python betiğinde yapabileceğimi merak ediyorum. – DjangoRocks

+1

Elbette, mevcut [Python bağlamaları grafviz'e] (https://www.google.com/search?q=python+graphviz+binding) alın ve python kabuğundan – theta

+0

teşekkürler! Bu yardımcı oldu! – DjangoRocks

4

Çok yakındınız! Sadece yapın:

graph_from_dot_data(out.getvalue()).write_pdf("somefile.pdf") 
+1

bu sadece #classes metindeki nvalue dizilerinin satırlar arasında kırılmayacak kadar küçük olması durumunda çalışacaktır. Bu durumda el ile aramak/değiştirmek zorunda kaldım '' (yasal olanları korumak, Tabii ki ... biraz acı. Tek kodlu etiketler için ditto ... onlar hemen hataları atarlar. – user1269942