web-dev-qa-db-fra.com

Que fait KFold dans python exactement?

Je regarde ce tutoriel: https://www.dataquest.io/mission/74/getting-started-with-kaggle

Je suis arrivé à la partie 9, faisant des prédictions. Il y a des données dans un cadre de données appelé titanic, qui est ensuite divisé en plis en utilisant:

# 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)

Je ne sais pas exactement ce qu'il fait et quel type d'objet est kf. J'ai essayé de lire la documentation mais cela n'a pas beaucoup aidé. De plus, il y a trois plis (n_folds = 3), pourquoi est-il plus tard seulement accessible à train et test (et comment puis-je savoir qu'ils sont appelés train et test) dans cette ligne?

for train, test in kf:
12
user

KFold fournira des indices de train/test pour diviser les données en train et ensembles de test. Il divisera l'ensemble de données en k plis consécutifs (sans mélange par défaut) .Chaque pli est ensuite utilisé une fois un ensemble de validation tandis que le k - 1 les plis restants forment l'ensemble d'apprentissage ( source ).

Disons que vous avez des indices de données de 1 à 10. Si vous utilisez n_fold=k, dans la première itération, vous obtiendrez i 'th (i<=k) se replie comme indices de test et reste (k-1) se replie (sans ce i 'ème pli) ensemble comme indices de train.

Un exemple

import numpy as np
from sklearn.cross_validation import KFold

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

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

Production

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

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

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

Importer la mise à jour pour sklearn 0.20:

L'objet KFold a été déplacé vers le sklearn.model_selection module dans la version 0.20. Pour importer KFold dans sklearn 0.20+, utilisez from sklearn.model_selection import KFold. Documentation actuelle de KFold source

18
qmaruf

Partager des informations théoriques sur KF que j'ai apprises jusqu'à présent.

KFOLD est une technique de validation de modèle, où il n'utilise pas votre modèle pré-formé. Au lieu de cela, il suffit d'utiliser le hyper-paramètre et de former un nouveau modèle avec l'ensemble de données k-1 et de tester le même modèle sur le kème ensemble.

K modèles différents sont juste utilisés pour la validation.

Il renverra les K scores différents (pourcentage de précision), qui sont basés sur le kième ensemble de données de test. Et nous prenons généralement la moyenne pour analyser le modèle.

Nous répétons ce processus avec tous les différents modèles que nous voulons analyser. Bref Algo:

  1. Répartissez les données dans la partie formation et test.
  2. Différents modèles formés disent SVM, RF, LR sur ces données d'entraînement.
   2.a Take whole data set and divide in to K-Folds.
   2.b Create a new model with the hyper parameter received after training on step 1.
   2.c Fit the newly created model on K-1 data set.
   2.d Test on Kth data set
   2.e Take average score.
  1. Analysez les différents scores moyens et sélectionnez le meilleur modèle parmi SVM, RF et LR.

Une raison simple pour cela, nous avons généralement des lacunes dans les données et si nous divisons l'ensemble de données en:

  1. Formation
  2. Validation
  3. Essai

Nous pouvons laisser de côté un petit bloc de données et qui peut surpasser notre modèle. Il est également possible que certaines données restent intactes pour notre formation et nous n'analysons pas le comportement par rapport à ces données.

KF a surmonté ces deux problèmes.

1
vipin bansal