2017-08-13 6 views
0

ich einen Baum Classifier namens Modell gemacht hatte, und versuchte, den Export graphviz Funktion wie folgt zu verwenden:Baum Klassifikator graphviz ERROR

export_graphviz(decision_tree=model, 
        out_file='NT_model.dot', 
        feature_names=X_train.columns, 
        class_names=model.classes_, 
        leaves_parallel=True, 
        filled=True, 
        rotate=False, 
        rounded=True) 

Aus irgendeinem Grund meiner Sicht diese Ausnahme ausgelöst hatte:


TypeError         Traceback (most recent call last) 
<ipython-input-298-40fe56bb0c85> in <module>() 
     6      filled=True, 
     7      rotate=False, 
----> 8      rounded=True) 

C:\Users\yonatanv\AppData\Local\Continuum\Anaconda3\lib\site- 
packages\sklearn\tree\export.py in export_graphviz(decision_tree, out_file, 
max_depth, feature_names, class_names, label, filled, leaves_parallel, 
impurity, node_ids, proportion, rotate, rounded, special_characters) 
    431    recurse(decision_tree, 0, criterion="impurity") 
    432   else: 
--> 433    recurse(decision_tree.tree_, 0, 
criterion=decision_tree.criterion) 
    434 
    435   # If required, draw leaf nodes at same depth as each other 

C:\Users\yonatanv\AppData\Local\Continuum\Anaconda3\lib\site- 
packages\sklearn\tree\export.py in recurse(tree, node_id, criterion, parent, 
depth) 
    319    out_file.write('%d [label=%s' 
    320       % (node_id, 
--> 321        node_to_str(tree, node_id, 
criterion))) 
    322 
    323    if filled: 

C:\Users\yonatanv\AppData\Local\Continuum\Anaconda3\lib\site- 
packages\sklearn\tree\export.py in node_to_str(tree, node_id, criterion) 
    289           np.argmax(value), 
    290           characters[2]) 
--> 291    node_string += class_name 
    292 
    293   # Clean up any trailing newlines 

TypeError: ufunc 'add' did not contain a loop with signature matching types 
dtype('<U90') dtype('<U90') dtype('<U90') 

Meine hyper-Parameter für die Visualisierungen sind diejenigen:

print(model) 
DecisionTreeClassifier(class_weight={1.0: 10, 0.0: 1}, criterion='gini', 
     max_depth=7, max_features=None, max_leaf_nodes=None, 
     min_impurity_split=1e-07, min_samples_leaf=50, 
     min_samples_split=2, min_weight_fraction_leaf=0.0, 
     presort=False, random_state=0, splitter='best') 

print(model.classes_) 
[ 0. , 1. ] 

Hilfe wäre am meisten geschätzt!

+0

Stellen Sie sicher, dass Sie die aktualisierte Version von scikit-learn verwenden. Wenn das Problem weiterhin besteht, müssen Sie uns weitere Details zur Verfügung stellen, um Ihnen zu helfen. Beginnen Sie mit der vollständigen Stack-Verfolgung des Fehlers. Geben Sie dann den Code, den Sie zum Trainieren des Modells verwendet haben, zusammen mit einigen Beispieldaten ein. –

+0

Ich verwende die Version, die auf anaconda3 installiert ist –

+0

Hinzugefügt mehr Beschreibung zu meiner Frage, thaks für die Benachrichtigung von mir! –

Antwort

0

Wie Sie hier in der documentation of export_graphviz angegeben sehen, funktioniert der Parameter class_names für Strings, nicht Float oder int.

class_names: Liste von Strings, bool oder None, optional (default = None)

Versuchen Sie, die model.classes_ zur Liste von Strings konvertieren, bevor sie in export_graphviz vorbei.

Versuchen Sie class_names=['0', '1'] oder class_names=['0.0', '1.0'] in den Anruf zu export_graphviz().

Für eine allgemeinere Lösung verwenden:

class_names=[str(x) for x in model.classes_]

Aber gibt es einen bestimmten Grund, dass Sie Float-Werte als y in model.fit() sind vorbei? Weil das in der Klassifizierungsaufgabe meist nicht benötigt wird. Haben Sie tatsächliche y Etiketten als nur oder konvertieren Sie Zeichenfolgenbeschriftungen in numerische vor dem Anpassen des Modells?

+0

Die y-Bezeichnungen sind hier ursprünglich numerisch, als binäre Variable –

+0

Ok dann. Vergiss es. –