2016-05-08 3 views
2

Ich habe zwei gelernt sklearn.tree.tree.DecisionTreeClassifier s. Beide sind mit den gleichen Trainingsdaten trainiert. Beide lernten mit unterschiedlichen maximalen Tiefen für die Entscheidungsbäume. Die Tiefe für die decision_tree_model war 6 und die Tiefe für die small_model war 2. Neben der max_depth wurden keine weiteren Parameter angegeben.sklearn DecisionTreeClassifier mehr Tiefe weniger Genauigkeit?

Wenn ich die Genauigkeit auf den Trainingsdaten von ihnen beiden wie diese erhalten möchten:

small_model_accuracy = small_model.score(training_data_sparse_matrix, training_data_labels) 
decision_tree_model_accuracy = decision_tree_model.score(training_data_sparse_matrix, training_data_labels) 

Überraschenderweise ist die Ausgabe:

small_model accuracy: 0.61170212766 
decision_tree_model accuracy: 0.422496238986 

Wie dies überhaupt möglich ist? Sollte ein Baum mit einer höheren maximalen Tiefe nicht immer eine höhere Genauigkeit auf den Trainingsdaten haben, wenn er mit den gleichen Trainingsdaten erlernt wird? Ist es vielleicht, dass score Funktion, die die 1 - accuracy oder etwas ausgibt?

EDIT:

  • Getestet habe ich es nur mit noch höherer maximaler Tiefe. Der zurückgegebene Wert wird noch niedriger. Dies deutet darauf hin, dass es 1 - accuracy oder so ähnlich ist.

EDIT # 2:

Es scheint einen Fehler, den ich mit den Trainingsdaten mit Arbeiten gemacht werden. Ich dachte nochmal über das Ganze nach und kam zu dem Schluss: "Nun, wenn die Tiefe höher ist, sollte der Baum nicht der Grund dafür sein. Was gibt es sonst noch? Die Trainingsdaten selbst. Aber ich habe die gleichen Daten verwendet! Vielleicht habe ich es getan etwas zu den Trainingsdaten dazwischen? " Dann habe ich noch einmal überprüft und es gibt einen Unterschied in der Verwendung der Trainingsdaten. Ich muss es von einem SFrame in eine scipy Matrix umwandeln (muss möglicherweise auch spärlich sein). Nun habe ich nach der Montage der beiden Modelle eine weitere Genauigkeitsberechnung durchgeführt. Dies führt zu einer Genauigkeit von 61% für die small_model und 64% Genauigkeit für die decision_tree_model. Das sind nur 3% mehr und immer noch etwas überraschend, aber zumindest ist es möglich.

EDIT # 3:

Das Problem behoben ist. Ich habe die Trainingsdaten falsch gehandhabt und das hat zu einer anderen Anpassung geführt.

ist hier die Handlung Genauigkeit nach den Fehlern Festsetzung:

Decision Tree Accuracy

Diese korrekt aussehen und würde auch erklären, warum die Zuordnung Schöpfer 6 als die maximale Tiefe wählen gewählt.

+0

Gibt es einen Grund, warum Sie 'max_depth' angegeben haben? Wenn Sie None setzen, versucht der Algorithmus, die Knoten nach Bedarf zu erweitern (grob gesagt). Können Sie andere Parameter, die Sie möglicherweise eingestellt haben, wie "min_samples_split" und "max_leaf_nodes", die wichtig sein könnten, auch mitteilen? –

+0

@tuuliocasagrande Es gibt einen Grund. Es gehört zur Aufgabe eines Online-Kurses, die Tiefe für diese Modelle auf 2 und 6 zu setzen. Es wurden keine weiteren Parameter angegeben. Ich füge diese Informationen zur Frage hinzu. – Zelphir

+0

Da Sie die Trainingsdaten verwenden, verwirrt mich auch die geringere Genauigkeit. Das einzige was ich sagen kann ist, dass 'score() 'nur eine Umgehung von [accuracy_score()] (http://scikit-learn.org/stable/modules/generated/sklearn.metrics.accuracy_score.html) und der Ausgabe ist keine "1 - Genauigkeit", wie Sie dachten. Intern macht es nur ein 'score = y_true == y_pred'. –

Antwort

1

Sollte ein Baum mit einer höheren maximalen Tiefe nicht immer eine höhere Genauigkeit haben, wenn er mit den gleichen Trainingsdaten gelernt wird?

Nein, definitiv nicht immer. Das Problem besteht darin, dass Sie Ihr Modell für Ihre Trainingsdaten überarbeiten, indem Sie einen komplexeren Baum anpassen. Daher erhöht die niedrigere Punktzahl als die maximale Tiefe.

+0

Und was, wenn der Wert 'score' zurückkommt, ist kleiner mit einer höheren Tiefe für die Trainingsdaten (nicht Validierungsdaten!). Deutet das nicht auf Überanpassen hin? – Zelphir

+1

Das OP trainiert und testet in den * gleichen Trainingsdaten *. Eine Überanpassung sollte hier kein Problem darstellen (beim Test = Trainingsdaten ist eine Überanpassung wünschenswert). –

+1

@imaluengo, der Begriff "Überanpassung" ist nur dann sinnvoll, wenn sowohl bei Trainingsdaten als auch bei Nicht-für-Probe-Daten eine Kostenmessung durchgeführt wird, wenn die Anpassung des Modells fortschreitet. –

Verwandte Themen