Ich habe einen ziemlich großen Datensatz in Form eines Datenrahmens und frage mich, wie ich den Datenrahmen in zwei zufällige Stichproben (80% und 20%) für Training und Test aufteilen kann.
Vielen Dank!
Ich habe einen ziemlich großen Datensatz in Form eines Datenrahmens und frage mich, wie ich den Datenrahmen in zwei zufällige Stichproben (80% und 20%) für Training und Test aufteilen kann.
Vielen Dank!
Es gibt viele Möglichkeiten, um Trainings-/Test- und sogar Validierungsstichproben zu erstellen.
Fall 1: klassische Methode train_test_split
ohne jegliche Optionen:
from sklearn.model_selection import train_test_split
train, test = train_test_split(df, test_size=0.3)
Fall 2: Fall eines sehr kleinen Datensatzes (<500 Zeilen): um Ergebnisse für alle Zeilen mit dieser Kreuzvalidierung zu erhalten. Am Ende haben Sie eine Vorhersage für jede Zeile Ihres verfügbaren Trainingsdatensatzes.
from sklearn.model_selection import KFold
kf = KFold(n_splits=10, random_state=0)
y_hat_all = []
for train_index, test_index in kf.split(X, y):
reg = RandomForestRegressor(n_estimators=50, random_state=0)
X_train, X_test = X[train_index], X[test_index]
y_train, y_test = y[train_index], y[test_index]
clf = reg.fit(X_train, y_train)
y_hat = clf.predict(X_test)
y_hat_all.append(y_hat)
Fall 3a: Unaugewogene Datensätze für Klassifikationszwecke. Nach Fall 1 hier die äquivalente Lösung:
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, test_size=0.3)
Fall 3b: Unaugewogene Datensätze für Klassifikationszwecke. Nach Fall 2 hier die äquivalente Lösung:
from sklearn.model_selection import StratifiedKFold
kf = StratifiedKFold(n_splits=10, random_state=0)
y_hat_all = []
for train_index, test_index in kf.split(X, y):
reg = RandomForestRegressor(n_estimators=50, random_state=0)
X_train, X_test = X[train_index], X[test_index]
y_train, y_test = y[train_index], y[test_index]
clf = reg.fit(X_train, y_train)
y_hat = clf.predict(X_test)
y_hat_all.append(y_hat)
Fall 4: Sie müssen Trainings-/Test-/Validierungssets auf großen Daten erstellen, um Hyperparameter abzustimmen (60% Trainingsdaten, 20% Testdaten und 20% Valdierungsdaten).
from sklearn.model_selection import train_test_split
X_train, X_test_val, y_train, y_test_val = train_test_split(X, y, test_size=0.6)
X_test, X_val, y_test, y_val = train_test_split(X_test_val, y_test_val, stratify=y, test_size=0.5)
Sie können den folgenden Code verwenden, um Test- und Trainingsstichproben zu erstellen:
from sklearn.model_selection import train_test_split
trainingSet, testSet = train_test_split(df, test_size=0.2)
Die Testgröße kann je nach prozentualem Anteil der Daten variieren, den Sie in Ihrem Test- und Trainingsdatensatz platzieren möchten.
Sie können auch eine stratifizierte Aufteilung in Trainings- und Testdatensatz in Betracht ziehen. Die stratifizierte Aufteilung generiert auch zufällig Trainings- und Testdatensätze, jedoch so, dass die ursprünglichen Klassenproportionen erhalten bleiben. Dadurch spiegeln Trainings- und Testdatensätze die Eigenschaften des ursprünglichen Datensatzes besser wider.
import numpy as np
def get_train_test_inds(y,train_proportion=0.7):
'''Generiert Indizes, um eine zufällige stratifizierte Aufteilung in Trainings- und Testsets mit den Anteilen train_proportion und (1-train_proportion) der ursprünglichen Stichprobe zu erstellen.
y ist ein beliebiges Iterable, das die Klassen jeder Beobachtung in der Stichprobe angibt.
Die ursprünglichen Klassenanteile in den Trainings- und Testsets werden beibehalten (stratifizierte Stichprobenahme).
'''
y=np.array(y)
train_inds = np.zeros(len(y),dtype=bool)
test_inds = np.zeros(len(y),dtype=bool)
values = np.unique(y)
for value in values:
value_inds = np.nonzero(y==value)[0]
np.random.shuffle(value_inds)
n = int(train_proportion*len(value_inds))
train_inds[value_inds[:n]]=True
test_inds[value_inds[n:]]=True
return train_inds,test_inds
df[train_inds] und df[test_inds] geben Ihnen die Trainings- und Testsets Ihres ursprünglichen DataFrame df.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.