Seite 1 von 1
Selbe Testdaten für verschiedene Probleme auswählen
Verfasst: Freitag 8. März 2019, 08:21
von Lizzy
Ich habe einen Decision Tree implementiert und möchte ihn mit verschiedenen Daten testen.
Der Datensatz enthält zB 200 items, die ich zufällig in 70% Training- und 30% Testdaten aufteile. Mein zweiter Datensatz enthält die "selben" 200 items, nur das Label/ die Klasse der items ist etwas verschieden zu dem ersten. Um die beiden Ergebnisse sinnvoll vergleichen zu können, bräuchte ich die gleichen items in den Trainings/ Testdaten.
Der "random_state" parameter hilft mir da ja nicht weiter, der sorgt nur dafür dass ich innerhalb eines Modells den gleichen Split behalte, nicht aber sobald ich einen neuen Datensatz einlese.
Hat hier jemand eine Idee?
Re: Selbe Testdaten für verschiedene Probleme auswählen
Verfasst: Freitag 8. März 2019, 14:14
von ThomasL
Ich nehme an du benutzt z.B. sklearn.model_selection.train_test_split(X,y, random_state=42)
Wenn in deinem zweiten Datensatz die "selben" 200 Items die gleiche Reihenfolge haben wie im ersten,
liefert dir obige Funktion den gleichen Split an Train Items und Test Items.
Wenn sie nicht die gleiche Reihenfolge haben, musst du schauen, ob du die gleiche Reihenfolge herstellen kannst.
Re: Selbe Testdaten für verschiedene Probleme auswählen
Verfasst: Freitag 8. März 2019, 17:57
von Lizzy
Ja genau ich verwende die train_test_split Funktion. Die Daten haben die gleiche Reihenfolge, alle features sind gleich nur eben das Label ist verschieden. Trotzdem, liefert die Funktion nicht den gleichen Split
Re: Selbe Testdaten für verschiedene Probleme auswählen
Verfasst: Freitag 8. März 2019, 19:33
von ThomasL
musste soeben feststellen, dass der Parameter "shuffle" standardmäßig True gesetzt ist.
Das sollte imho so nicht sein.
Du musst also schreiben:
Code: Alles auswählen
X_train, X_test, y_train, y_test = train_test_split(X, y1, test_size=0.3, random_state=42, shuffle=False)
Re: Selbe Testdaten für verschiedene Probleme auswählen
Verfasst: Freitag 8. März 2019, 20:16
von ThomasL
Also, habe mir die Funktion noch mal genauer angeschaut.
Wenn shuffle=False gesetzt wird, ist random_state= unnötig, da nicht gemischt wird.
Wenn shuffle=True ist, wird die Reihenfolge der Reihen der features und labels gleich gemischt.
Beispielcode:
Code: Alles auswählen
import numpy as np
samples = np.arange(10)
features = np.array([samples+i for i in range(1, 11)])
labels1 = samples + 80
labels2 = samples + 90
# 1. Datensatz
X_train, X_test, y_train, y_test = train_test_split(features, labels1, test_size=0.3, random_state=42, shuffle=True)
print("X_train")
print(X_train)
print("X_test")
print(X_test)
print("y_train")
print(y_train)
print("y_test")
print(y_test)
print()
# 2. Datensatz
X_train, X_test, y_train, y_test = train_test_split(features, labels2, test_size=0.3, random_state=42, shuffle=True)
print("X_train")
print(X_train)
print("X_test")
print(X_test)
print("y_train")
print(y_train)
print("y_test")
print(y_test)
print()
Wenn das bei dir nicht so ist, ist die Reihenfolge bei dir nicht gleich, benutzt du unterschiedliche random_state= Werte?
Oder eventuell gar kein random_state= ?
Wenn du keinen Seed angibst, ist der zufällig ! Das wäre die Erklärung.
Re: Selbe Testdaten für verschiedene Probleme auswählen
Verfasst: Samstag 9. März 2019, 09:57
von Lizzy
Danke für die Antwort! Habe den Fehler gefunden: Ich hatte den parameter stratify auf true gesetzt...das funktioniert dann natürlich nicht mehr wenn man einen anderen Datensatz hat