Estoy intentando usar el train_test_split
paquete scikit Learn, pero tengo problemas con el parámetro stratify
. A continuación está 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 : similar a una matriz o Ninguno (el valor predeterminado es Ninguno)
Si no es Ninguno, los datos se dividen de forma estratificada, utilizando esto como matriz de etiquetas.
Nuevo en la versión 0.17: estratificar la división
[...]
split
scikit-learn
training-data
test-data
Daneel Olivaw
fuente
fuente
Respuestas:
Scikit-Learn solo le dice que no reconoce el argumento "estratificar", no que lo esté 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ó.
Así que solo necesitas actualizar Scikit-Learn.
fuente
scikit-learn 0.21.2 py37h2a6a0b8_0 conda-forge
Este
stratify
parámetro realiza una división para que la proporción de valores en la muestra producida sea la misma que la proporción de valores proporcionados al parámetrostratify
.Por ejemplo, si la variable
y
es una variable categórica binaria con valores0
y1
hay un 25% de ceros y un 75% de unos,stratify=y
se asegurará de que su división aleatoria tenga un 25% de0
y un 75% de1
.fuente
stratify
. Luego, en segundo lugar, para corregir el desequilibrio, eventualmente tendrá que realizar un muestreo excesivo o insuficiente en el conjunto de entrenamiento. Muchos clasificadores de Sklearn tienen un parámetro llamado class-weight que puede establecer en balanceado. Finalmente, también podría tomar una métrica más apropiada que la precisión para un conjunto de datos desequilibrado. Pruebe, F1 o área debajo de ROC.Para mi yo futuro que viene aquí a través de Google:
train_test_split
está ahora enmodel_selection
, por lo tanto:es la forma de utilizarlo. Establecer el
random_state
es deseable para la reproducibilidad.fuente
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.
fuente
Intente ejecutar este código, "simplemente funciona":
fuente
sklearn
la versión '0.17', distribución Anaconda para Python 3,5. Solo puedo sugerir que verifique una vez más si ingresa el código correctamente y actualiza su software.sklearn
...