Paramètre "stratify" de la méthode " train test split "(scikit Learn)

je suis en train d'utiliser train_test_split à partir de package scikit Learn, mais j'ai de la difficulté avec le paramètre stratify. Voici le code:

from sklearn import cross_validation, datasets 

X = iris.data[:,:2]
y = iris.target

cross_validation.train_test_split(X,y,stratify=y)

Cependant, je reçois le problème suivant:

raise TypeError("Invalid parameters passed: %s" % str(options))
TypeError: Invalid parameters passed: {'stratify': array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])}

quelqu'un a-t-il une idée de ce qui se passe? Ci-dessous, la documentation de la fonction.

[...]

stratifier : semblable au tableau ou Aucun (None par défaut).

si ce n'est pas le cas, les données sont divisées en mode stratifié, en utilisant ceci comme le tableau des étiquettes.

Nouveau dans la version 0.17: stratifier fractionnement

[...]

31
demandé sur Daneel Olivaw 2016-01-17 22:05:33

5 réponses

Scikit-Learn vous dit simplement qu'il ne reconnaît pas l'argument "stratifier", pas que vous l'utilisez incorrectement. C'est parce que le paramètre a été ajouté dans la version 0.17 comme indiqué dans la documentation que vous avez Citée.

il vous suffit donc de mettre à jour Scikit-Learn.

16
répondu Borja 2016-12-10 10:33:47

stratify paramètre rend une fraction de sorte que la proportion de valeurs dans l'échantillon produit sera la même que la proportion de valeurs pour le paramètre stratify.

par exemple, si variable y est une variable catégorique binaire avec des valeurs 0 et 1 et il y a 25% de zéros et 75% de uns, stratify=y s'assurera que votre split aléatoire a 25% de 0's et 75% de 1.

97
répondu Fazzolini 2016-08-11 07:00:21

Pour mon futur moi qui vient ici via Google:

train_test_split est model_selection donc:

from sklearn.model_selection import train_test_split

# given:
# features: xs
# ground truth: ys

x_train, x_test, y_train, y_test = train_test_split(xs, ys,
                                                    test_size=0.33,
                                                    random_state=0,
                                                    stratify=ys)

est la manière de l'utiliser. Réglage de l' random_state est souhaitable pour la reproductibilité.

18
répondu Martin Thoma 2017-10-17 06:52:02

Essayez d'exécuter ce code, il "fonctionne":

from sklearn import cross_validation, datasets 

iris = datasets.load_iris()

X = iris.data[:,:2]
y = iris.target

x_train, x_test, y_train, y_test = cross_validation.train_test_split(X,y,train_size=.8, stratify=y)

y_test

array([0, 0, 0, 0, 2, 2, 1, 0, 1, 2, 2, 0, 0, 1, 0, 1, 1, 2, 1, 2, 0, 2, 2,
       1, 2, 1, 1, 0, 2, 1])
2
répondu Sergey Bushmanov 2016-01-17 20:45:17

dans ce contexte, la stratification signifie que la méthode train_test_split renvoie des sous-ensembles de formation et d'essai qui ont les mêmes proportions d'étiquettes de classe que l'ensemble de données d'entrée.

2
répondu X. Wang 2017-12-01 00:14:09