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.