Ich erhalte eine 100% ige Genauigkeit für meinen Entscheidungsbaum. Was mache ich falsch?
Das ist mein Code:
import pandas as pd
import json
import numpy as np
import sklearn
import matplotlib.pyplot as plt
data = np.loadtxt("/Users/Nadjla/Downloads/allInteractionsnum.csv", delimiter=',')
x = data[0:14]
y = data[-1]
from sklearn.cross_validation import train_test_split
x_train = x[0:2635]
x_test = x[0:658]
y_train = y[0:2635]
y_test = y[0:658]
from sklearn.tree import DecisionTreeClassifier
tree = DecisionTreeClassifier()
tree.fit(x_train.astype(int), y_train.astype(int))
from sklearn.metrics import accuracy_score
y_predicted = tree.predict(x_test.astype(int))
accuracy_score(y_test.astype(int), y_predicted)
machine-learning
python
cart
accuracy
Nadjla
quelle
quelle
Antworten:
Ihr Testmuster ist eine Teilmenge Ihres Trainingsmusters:
Dies bedeutet, dass Sie Ihr Modell anhand eines Teils Ihrer Trainingsdaten bewerten, dh, Sie führen eine Stichprobenbewertung durch. Die Genauigkeit innerhalb der Probe ist ein notorisch schlechter Indikator für die Genauigkeit außerhalb der Probe, und die Maximierung der Genauigkeit innerhalb der Probe kann zu einer Überanpassung führen. Aus diesem Grund sollte ein Modell immer an einer echten Holdout-Stichprobe evaluiert werden, die von den Trainingsdaten völlig unabhängig ist.
Stellen Sie sicher, dass Ihr Training und Ihre Testdaten nicht zusammenpassen, z.
quelle
sklearn.model_selection.train_test_split
wie Juan Ignacio Gil vorschlägt, da hierdurch auch die Mengen gemischt werden und Bedenken vermieden werden, wenn der Datensatz nicht zufällig in der Reihenfolge ist. Es ist auch klarer, weil es die Absicht zeigt und automatisch Änderungen in der Größe des Datensatzes verarbeitet.GridSearchCV
mit Trainingsdaten, um die Genauigkeit zu testen, bekomme ich 100% mitKNeighborsClassifier
. Ich habetest_train_split
zum Teilen des Datensatzes verwendet. Was hätte ich hier falsch machen können?Sie erhalten eine 100% ige Genauigkeit, da Sie einen Teil der Trainingsdaten zum Testen verwenden. Zum Zeitpunkt des Trainings hat Decision Tree das Wissen über diese Daten gewonnen. Wenn Sie nun dieselben Daten zur Vorhersage angeben, erhalten Sie genau denselben Wert. Deshalb liefert der Entscheidungsbaum jedes Mal die richtigen Ergebnisse.
Bei Problemen mit maschinellem Lernen sollten Schulungs- und Testdatensatz getrennt werden. Die Genauigkeit des Modells kann nur bestimmt werden, wenn wir untersuchen, wie es für unbekannte Werte prognostiziert wird.
quelle
Wie andere Benutzer Ihnen bereits mitgeteilt haben, verwenden Sie als Testset eine Teilmenge des Zugsets, und ein Entscheidungsbaum ist sehr anfällig für Überanpassungen.
Sie hatten es fast, als Sie importierten
Aber dann benutzt du die Funktion nicht. Du hättest tun sollen:
zufällige Zug- und Testsätze zu bekommen
quelle
Wie @Stephan Kolassa und @Sanjay Chandlekar betonten, ist dies auf die Tatsache zurückzuführen, dass Ihr Testmuster eine Teilmenge Ihres Trainingsmusters ist.
Für die Auswahl dieser Stichproben wäre jedoch eine Zufallsstichprobe angemessener, um sicherzustellen, dass beide Stichproben repräsentativ sind. Abhängig von Ihrer Datenstruktur können Sie auch eine geschichtete Zufallsauswahl in Betracht ziehen.
Ich spreche nicht fließend Python, aber jede statistische Software sollte Stichproben zulassen. Einige Hinweise sind auch auf SO verfügbar .
quelle
Ich möchte nur auf die Intuition eingehen, warum Sie das Training aufteilen und die Proben explizit testen müssen.
Wenn Sie Beobachtungen haben und (tatsächlich und möglicherweise weit weniger) Teilungen in Ihren Daten vornehmen , werden Sie jeden Punkt perfekt klassifizieren (wenn dies nicht sofort klar ist, notieren Sie sich einige kleine Beispiele, z. B. und überzeugen Sie sich davon).n n - 1 n = 2n n n−1 n=2
Dies wird als Überanpassung bezeichnet, da dieser Aufteilungsprozess äußerst unwahrscheinlich ist , Datenpunkte vorherzusagen, die für Ihr Problem relevant sind, die Sie jedoch noch nicht beobachtet haben .
Natürlich besteht der Sinn des Aufbaus dieser Vorhersageplattformen darin, Tools zu erstellen, die auf noch nie dagewesene Daten angewendet werden können. Das Aufteilen der Daten in Trainings- und Testmuster ist ein Versuch, diese Selbstblindung zu simulieren und die Überanpassung unserer Modelle auf die oben beschriebene Weise zu überwachen.
quelle
Sie benötigen keine 100% ige Genauigkeit, um eine Überanpassung durchzuführen. Mit genügend Eimern können Sie irreproduzierbare Ergebnisse erzielen (etwas, das außerhalb der Stichprobe fürchterlich aussieht).
In diesem Artikel aus dem Lancet wird beschrieben, wie eine Probe in viel zu feine Eimer geschnitten wird. Munchausens statistisches Gitter Es ist auch die Grundlage für den XKCD-Cartoon Significant
Das Erreichen einer Genauigkeit von 100% ist nur einen kurzen Schritt von der Suche nach einem Klassifikator entfernt, der täuschend gut funktioniert.
quelle