train test stratify stratifiedshufflesplit into data cross code array and split scikit-learn training-data test-data

stratify - Parámetro "estratificar" del método "train_test_split"(scikit Learn)



train test split (5)

En este contexto, la estratificación significa que el método train_test_split devuelve subconjuntos de entrenamiento y prueba que tienen las mismas proporciones de etiquetas de clase que el conjunto de datos de entrada.

Estoy tratando de usar train_test_split del paquete scikit Learn, pero tengo problemas con la stratify parámetros. De aquí en adelante es el código:

from sklearn import cross_validation, datasets X = iris.data[:,:2] y = iris.target cross_validation.train_test_split(X,y,stratify=y)

Sin embargo, sigo teniendo el siguiente problema:

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])}

¿Alguien tiene una idea de lo que está pasando? A continuación se muestra la documentación de la función.

[...]

estratificar : tipo matriz o Ninguno (el valor predeterminado es Ninguno)

Si no es Ninguno, los datos se dividen de manera estratificada, utilizando esto como matriz de etiquetas.

Nuevo en la versión 0.17: estratificación de división

[...]


Este parámetro de stratify se divide para que la proporción de valores en la muestra producida sea la misma que la proporción de valores proporcionados para stratify parámetro.

Por ejemplo, si la variable y es una variable categórica binaria con valores 0 y 1 y hay un 25% de ceros y un 75% de unos, stratify=y se asegurará de que su división aleatoria tenga un 25% de 0 ''s y un 75% de 1 ''s.


Intente ejecutar este código, "simplemente funciona":

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


Para mi futuro yo que viene aquí a través de Google:

train_test_split ahora está en model_selection , por lo tanto:

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)

es la forma de usarlo. Establecer el random_state es deseable para la reproducibilidad.


Scikit-Learn solo te dice que no reconoce el argumento "estratificar", no que lo estés usando incorrectamente. Esto se debe a que el parámetro se agregó en la versión 0.17 como se indica en la documentación que citó.

Entonces solo necesita actualizar Scikit-Learn.