2017-05-18 3 views
1

Ich folge Jeff Heaton Deep Learning Kurs Course linksklearn KFold() - speichern Sie alle Falten in die CSV-Datei

und auch mit den Übungen gowing. In der ersten Programmieraufgabe, Frage 5, fragt er in der letzten Aufgabe, die Ausgabe der KFold(5) kreuzweise validierten Eingabedaten in eine CSV-Datei zu schreiben. Grundsätzlich werden wir nach dem KFold (5) 5 Datensätze haben (Train/Test). Ich muss sie zusammenkleben und in einer Datei speichern. Ich habe versucht, es zu tun, aber meine Daten überschreiben und ich bekomme nur die letzten Falzdaten in meiner Ausgabe. Ich beginne mit Python und ich denke, ich kann nicht sehen, wie man die Schleife macht, um Pandas richtig anzufügen. Link zu den Übungen: Exercise 5

Teil meines Codes: df_car ist ein Original Pandas df. df_cars1 ist eine Kopie von df_cars, aber ich mache es, um leer zu später Daten anhängen

kf = KFold(5) 
#  df_cars.insert(0,'set', 'str') 
df_cars.insert(1,'iteration', 0) 
df_cars1 = pd.DataFrame(data=None, columns=df_cars.columns,index=df_cars.index) 
df_cars1.dropna() 

fold = 1 
for train_index, validate_index in kf.split(df_cars):   
    trainDF = pd.DataFrame(df_cars.ix[train_index]) 
    validateDF = pd.DataFrame(df_cars.ix[validate_index]) 
    trainDF[['set', 'iteration']] = 'T', fold 
    validateDF[['set', 'iteration']] = 'V', fold 
    print("Fold #{}, Training Size: {}, Validation Size: {}".format(fold,len(trainDF),len(validateDF))) 
    fold+=1 
    df_cars1 = pd.concat([validateDF,trainDF]) 

df_cars1.to_csv("./data/auto-mpg-kfold5.csv") 
print(df_cars1) 

Probe meiner Ausgabe ist:

mpg iteration set cylinders displacement horsepower weight acceleration year origin name 
319 0.997344 5 V 4 -0.705077 -0.767632 -0.506545 0.701436 80 3 mazda 626 
320 1.727537 5 V 4 -0.714680 -0.322309 -0.634239 -0.206262 80 3 datsun 510 hatchback 
321 1.112638 5 V 4 -0.820308 -0.767632 -0.834055 -0.133646 80 3 toyota corolla 
322 2.957335 5 V 4 -1.031565 -1.029586 -1.017318 0.846667 80 3 mazda glc 

Wie Sie sehen, sind alle Werte in der Spalte iteration sind Werte von 5, was bedeutet, dass nur der letzte, der fünfte KFold an df_cars1 angehängt wird und ich dort alle fünf Falten brauche. Jede mögliche Hilfe

+1

Sie müssen die Zeile einrücken df_cars1 = pd.concat ([validateDF, trainDF]) ' – gnub

+0

@fnub, mein Fehler, falscher Code kopieren/einfügen, aber das Ergebnis ist immer noch das gleiche. – kuatroka

Antwort

1

Das Problem ist in den letzten Zeile Ihrer for-Schleife

... 
df_cars1 = pd.concat([validateDF,trainDF]) 

geschätzt werden Was dies tut ist die Neuzuweisung der df_cars1 Variable mit den aktuellen Zug und Validierungsdaten und die Informationen über alte Iteration hat verloren.

Ändern Sie es an:

df_cars1 = pd.concat([df_cars1, validateDF,trainDF]) 

also, dass sie die vorherigen Falten mit diesem verbindet. Ich hoffe es hilft.

+0

Vielen Dank Kumpel. Es funktionierte. Es wurde ein ganzer df mit NaNs hinzugefügt, aber nach dem Entfernen mit 'df_cars1.dropna (inplace = True)' sind die Zahlen jetzt korrekt. – kuatroka

+0

@ kuatroka Ja, weil es das leere df in der ersten Iteration der Schleife hinzufügen wird. –

Verwandte Themen