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
[...]
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.
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
.
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é.
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])
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.