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?
Selbe Testdaten für verschiedene Probleme auswählen
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.
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.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
musste soeben feststellen, dass der Parameter "shuffle" standardmäßig True gesetzt ist.
Das sollte imho so nicht sein.
Du musst also schreiben:
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)
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
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:
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.
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()
Oder eventuell gar kein random_state= ?
Wenn du keinen Seed angibst, ist der zufällig ! Das wäre die Erklärung.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png