2016-03-17 25 views
5

Sto osservando questo tutorial: https://www.dataquest.io/mission/74/getting-started-with-kaggleCosa fa esattamente KFold in python?

Sono arrivato alla parte 9, facendo previsioni. Lì dentro ci sono alcuni dati in un dataframe chiamato titanica, che viene poi diviso in pieghe utilizzando:

# Generate cross validation folds for the titanic dataset. It return the row indices corresponding to train and test. 
# We set random_state to ensure we get the same splits every time we run this. 
kf = KFold(titanic.shape[0], n_folds=3, random_state=1) 

io non sono sicuro di cosa si tratta esattamente di fare e che tipo di oggetto è kf. Ho provato a leggere la documentazione ma non è stato di grande aiuto. Inoltre, ci sono tre pieghe (n_folds = 3), perché in seguito accederà solo al treno e al test (e come faccio a sapere che sono chiamati treno e test) in questa linea?

for train, test in kf: 

risposta

4

KFold fornirà indici treno/test per suddividere i dati in treno e set di test. Divide il set di dati in k pieghe consecutive (senza mescolare per impostazione predefinita). Ogni volta viene utilizzato un set di convalida una volta mentre le pieghe rimanenti k - 1 formano il set di allenamento (source).

Diciamo, avete alcuni indici di dati da 1 a 10. Se si utilizza n_fold=k, in prima iterazione si otterrà i 'th (i<=k) piega come indici di test e rimanendo (k-1) pieghe (senza che i' th volte) insieme Indicare gli indici.

Un esempio

import numpy as np 
from sklearn.cross_validation import KFold 

x = [1,2,3,4,5,6,7,8,9,10,12] 
kf = KFold(12, n_folds=3) 

for train_index, test_index in kf: 
    print (train_index, test_index) 

uscita

pieghevole 1: [4 5 6 7 8 9 10 11] [0 1 2 3]

piegatura 2: [0 1 2 3 8 9 10 11] [4 5 6 7]

piega 3: [0 1 2 3 4 5 6 7] [8 9 10 11]

+0

Ho capito. Qualunque cosa sia n_folds, si finisce sempre con un test e un set di allenamento. Se n_folds è 2, devi solo utilizzare metà dei dati per l'allenamento e l'altra metà per i test, e quindi scambiarli. Sto comprendendo questo correttamente? – user

+1

Sì. Otterrai l'i'th (1 <= i <= n_fold) fold come test e le restanti fold come allenamento. – qmaruf