Wie extrahiert man die Entscheidungsregeln aus dem Entscheidungsbaum von scikit-learn?
Kann ich Extrakt der zugrunde liegenden Entscheidung-Regeln (oder 'Entscheidungswege') von einem geschulten Baum in einem Entscheidungsbaum, wie eine textuelle Liste?
Etwas wie:
if A>0.4 then if B<0.2 then if C>0.8 then class='X'
Vielen Dank für Ihre Hilfe.
InformationsquelleAutor der Frage Dror Hilman | 2013-11-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, diese Antwort ist richtiger als die anderen Antworten hier:
Dieser druckt eine gültige Python-Funktion. Hier ist ein Beispiel für die Ausgabe für einen Baum, der versucht, wieder in seine Eingabe, um eine Zahl zwischen 0 und 10.
Hier sind einige Stolpersteine, die ich sehe, in anderen Antworten:
tree_.threshold == -2
zu entscheiden, ob ein Knoten ein Blatt ist keine gute Idee. Was ist, wenn es eine echte Entscheidung-Knoten mit einem Schwellenwert von -2? Statt, Sie sollten Blick auftree.feature
odertree.children_*
.features = [feature_names[i] for i in tree_.feature]
Abstürze mit meiner version von sklearn, da einige Werte vontree.tree_.feature
sind-2 (speziell für Blatt-Knoten).InformationsquelleAutor der Antwort paulkernfeld
Habe ich meine eigene Funktion zum extrahieren von Regeln aus Entscheidungsbäumen erstellt von sklearn:
Dieser Funktion, beginnt zuerst mit den Knoten (identifiziert durch -1 in den untergeordneten arrays) und dann rekursiv findet die Eltern. Ich nenne das einen Knoten 's ' Linie'. Auf dem Weg schnappe ich mir die Werte die ich brauche, um zu erstellen, wenn/dann/sonst-SAS-Logik:
Den sets von Tupeln unten enthält alles, was brauche ich zum erstellen von SAS-if/then/else-Anweisungen. Ich weiß nicht, wie mit
do
Blöcke in SAS, das ist der Grund, warum ich Logik erstellen Beschreibung einen Knoten den gesamten Pfad. Die einzige ganze Zahl, die nach der Tupel ist die ID der terminal-Knoten in einem Pfad. Alle vorhergehenden Tupel kombinieren, um diesem Knoten.InformationsquelleAutor der Antwort Zelazny7
Ich veränderte den code verfasst von Zelazny7 drucken einige pseudocode:
wenn Sie anrufen
get_code(dt, df.columns)
auf der gleichen Beispiel Sie erhalten:InformationsquelleAutor der Antwort Daniele
Gibt es eine neue
DecisionTreeClassifier
Methodedecision_path
im 0.18.0 release. Die Entwickler haben eine umfangreiche (gut dokumentiert) Exemplarische Vorgehensweise.Den ersten code-Abschnitt, der in die Exemplarische Vorgehensweise, die prints die Struktur scheint in Ordnung zu sein. Jedoch, ich veränderte den code in den zweiten Abschnitt zu befragen einer Stichprobe. Meine änderungen angegeben mit
# <--
Ändern Sie die
sample_id
zu sehen, die Entscheidungswege für die anderen Proben. Ich habe nicht gefragt, die Entwickler über diese änderungen, schien nur mehr intuitiv, wenn die Arbeit durch das Beispiel.InformationsquelleAutor der Antwort Kevin
Können Sie sehen, ein digraph Baum. Dann
clf.tree_.feature
undclf.tree_.value
sind array von Knoten-splitting Funktion und array von Knoten, die Werte jeweils. Sie können finden Sie mehr details aus dieser github Quelle.InformationsquelleAutor der Antwort lennon310
Codes unten ist mein Ansatz unter anaconda python 2.7-plus-Paket-name "pydot-ng" um eine PDF-Datei mit Regeln für die Entscheidung. Ich hoffe, es ist hilfreich.
ein Baum typographie hier zeigen
InformationsquelleAutor der Antwort TED Zhao
Nur weil jeder war so hilfreich, ich werde nur hinzufügen, dass eine änderung Zelazny7 und Daniele ' s schöne Lösungen. Das ist eine für python 2.7, mit Registerkarten, um Sie lesbarer zu machen:
InformationsquelleAutor der Antwort Ruslan
Hier ist eine Funktion, die den Druck Regeln der scikit-learn Entscheidungsbaum unter python 3 und mit offsets für bedingte Blöcke, um die Struktur besser lesbar:
InformationsquelleAutor der Antwort Apogentus
Diese baut auf @paulkernfeld 's Antwort. Wenn Sie ein dataframe X mit Ihre Gesichtszüge und ein Ziel dataframe y mit Ihren resonses und Sie möchten, um eine Vorstellung zu bekommen, welcher y-Wert endete die Knoten (und auch die ant zu zeichnen Sie es entsprechend) können Sie Folgendes tun:
nicht die eleganteste version, aber es macht den job...
InformationsquelleAutor der Antwort horseshoe
Ich habe durch diese gehen, aber ich brauchte die Regeln geschrieben werden, die in diesem format
So, angepasst ich die Antwort von @paulkernfeld (danke), die Sie anpassen können, um Ihren Bedarf
InformationsquelleAutor der Antwort Ala Ham
Geändert Zelazny7 code zum abrufen von SQL aus dem Entscheidungsbaum.
InformationsquelleAutor der Antwort Arslán
Offenbar vor langer Zeit jemand bereits beschlossen, zu versuchen, fügen Sie die folgende Funktion auf der offiziellen scikit-tree-export-Funktionen (die im Grunde nur unterstützt export_graphviz)
Hier ist sein vollständiger commit:
https://github.com/scikit-learn/scikit-learn/blob/79bdc8f711d0af225ed6be9fdb708cea9f98a910/sklearn/tree/export.py
Nicht genau sicher, was passiert auf dieser Kommentar. Aber Sie könnten auch versuchen, die Funktion zu nutzen.
Ich denke, das rechtfertigt eine ernsthafte Dokumentation Anforderung an die guten Leute von scikit-learn, um richtig zu dokumentieren
sklearn.tree.Tree
- API, die die zugrunde liegende Struktur, dieDecisionTreeClassifier
macht als Attributtree_
.InformationsquelleAutor der Antwort Aris Koning