sklearn train_test_split auf pandas Schichten von mehreren Spalten

Ich bin ein relativ neuer Benutzer sklearn und führen Sie in eine unerwartete Verhalten in train_test_split von sklearn.model_selection. Ich habe ein pandas dataframe, dass ich möchte, aufgeteilt in eine Trainings-und Testsatz. Ich möchte zu Schichten, dass meine Daten von mindestens 2, idealerweise aber 4 Spalten in meiner dataframe.

Gab es keine Warnungen aus sklearn, wenn ich versuchte, dies zu tun, jedoch fand ich später, dass es wiederholte Zeilen in meinem letzten Datensatz. Erstellt habe ich ein Probe-test zeigen dieses Verhalten:

from sklearn.model_selection import train_test_split
a = np.array([i for i in range(1000000)])
b = [i%10 for i in a]
c = [i%5 for i in a]
df = pd.DataFrame({'a':a, 'b':b, 'c':c})

Es scheint zu funktionieren wie erwartet, wenn ich die Schichten entweder durch Spalte:

train, test = train_test_split(df, test_size=0.2, random_state=0, stratify=df[['b']])
print(len(train.a.values))  # prints 800000
print(len(set(train.a.values)))  # prints 800000

train, test = train_test_split(df, test_size=0.2, random_state=0, stratify=df[['c']])
print(len(train.a.values))  # prints 800000
print(len(set(train.a.values)))  # prints 800000

Aber wenn ich versuche zu Schichten, die durch beide Spalten, bekomme ich wiederholte Werte:

train, test = train_test_split(df, test_size=0.2, random_state=0, stratify=df[['b', 'c']])
print(len(train.a.values))  # prints 800000
print(len(set(train.a.values)))  # prints 640000
InformationsquelleAutor Caitlin | 2017-08-04
Schreibe einen Kommentar