2013-11-23 23 views
28

Ho esplorato scikit-learn, facendo alberi decisionali con entropia e criteri di suddivisione di gini ed esplorando le differenze.Come trovare gli attributi su cui si divide la mia struttura quando si utilizza scikit-learn?

La mia domanda è: come posso "aprire il cofano" e scoprire esattamente quali attributi si dividono gli alberi a ogni livello, insieme ai valori delle informazioni associate, così posso vedere dove i due criteri fanno scelte diverse?

Finora, ho esplorato i 9 metodi descritti nella documentazione. Non sembrano consentire l'accesso a queste informazioni. Ma sicuramente questa informazione è accessibile? Sto immaginando una lista o un dettt con voci per il nodo e il guadagno.

Grazie per il vostro aiuto e le mie scuse se ho perso qualcosa di completamente ovvio.

risposta

26

direttamente dalla documentazione (http://scikit-learn.org/0.12/modules/tree.html):

from StringIO import StringIO 
out = StringIO() 
out = tree.export_graphviz(clf, out_file=out) 

C'è anche l'attributo tree_ nell'oggetto albero decisionale, che consente l'accesso diretto a tutta la struttura.

E si può semplicemente leggere

clf.tree_.children_left #array of left children 
clf.tree_.children_right #array of right children 
clf.tree_.feature #array of nodes splitting feature 
clf.tree_.threshold #array of nodes splitting points 
clf.tree_.value #array of nodes values 

per maggiori dettagli guardare il source code of export method

In generale è possibile utilizzare il modulo

from inspect import getmembers 
print(getmembers(clf.tree_)) 

inspect per ottenere tutti gli elementi dell'oggetto

Decision tree visualization from sklearn docs

+6

"left" è sempre il valore "true" e right è il "false"? –

+0

Il primo link è rotto – Dzhao

7

Se si desidera solo un rapido sguardo a che cosa sta succedendo nella struttura, provare:

zip(X.columns[clf.tree_.feature], clf.tree_.threshold, clf.tree_.children_left, clf.tree_.children_right) 

dove X è il frame di dati di variabili indipendenti e CLF è l'oggetto albero decisionale. Notare che clf.tree_.children_left e clf.tree_.children_right insieme contengono l'ordine in cui sono state create le suddivisioni (ognuna di queste corrisponderebbe a una freccia nella visualizzazione graphviz).

Problemi correlati