sklearn learning documentacion decision classifier machine-learning scikit-learn random-forest

machine learning - learning - Elegir estado_aleatorio para algoritmos de sklearn



sklearn learning curve (2)

Entiendo que random_state se usa en varios algoritmos de sklearn para romper el empate entre diferentes predictores (árboles) con el mismo valor métrico (por ejemplo, en GradientBoosting ). Pero la documentación no aclara ni detalla sobre esto. Me gusta

1) ¿Dónde más se usan estas semillas para la generación de números aleatorios? Digamos por RandomForestClassifier , un número aleatorio puede usarse para encontrar un conjunto de características aleatorias para construir un predictor. Los algoritmos que utilizan submuestreo pueden usar números aleatorios para obtener submuestras diferentes. ¿Puede / es la misma semilla ( random_state ) jugar un papel en múltiples generaciones de números aleatorios?

Lo que más me preocupa es

2) qué tan extenso es el efecto de esta variable de estado_aleatorio. ? ¿Puede el valor hacer una gran diferencia en la predicción (clasificación o regresión). En caso afirmativo, ¿qué tipo de conjuntos de datos debería preocuparme más? ¿O se trata más de estabilidad que de calidad de resultados?

3) Si puede hacer una gran diferencia, ¿cuál es la mejor manera de elegir ese estado_aleatorio ?. Es difícil hacer GridSearch, sin una intuición. Especialmente si el conjunto de datos es tal que un CV puede tomar una hora.

4) Si el motivo es solo tener un resultado / evaluación constante de mis modelos y puntajes de validación cruzada en carreras repetidas, ¿tiene el mismo efecto si configuro random.seed(X) antes de usar cualquiera de los algoritmos (y uso random_state como ninguno).

5) Supongamos que estoy usando un valor de estado random_state en un clasificador random_state en gradiente, y estoy validando de forma cruzada para encontrar la bondad de mi modelo (puntuación en el conjunto de validación cada vez). Una vez satisfecho, entrenaré mi modelo en todo el conjunto de entrenamiento antes de aplicarlo en el conjunto de prueba. Ahora, el conjunto de entrenamiento completo tiene más instancias que los conjuntos de entrenamiento más pequeños en la validación cruzada. Entonces, el valor de estado random_state ahora puede dar como resultado un comportamiento completamente diferente (elección de características y predictores individuales) en comparación con lo que estaba sucediendo dentro del ciclo de cv. De manera similar, cosas como hojas de muestras mínimas, etc. también pueden dar como resultado un modelo inferior ahora que la configuración es el número de instancias en CV, mientras que el número real de instancias es mayor. ¿Es esto una comprensión correcta? ¿Cuál es el enfoque para protegerse de esto?


Sí, la elección de las semillas al azar tendrá un impacto en los resultados de su predicción y, como señaló en su cuarta pregunta, el impacto no es realmente predecible.

La forma común de protegerse contra las predicciones que resultan ser buenas o malas por casualidad es entrenar varios modelos (basados ​​en diferentes estados aleatorios) y promediar sus predicciones de una manera significativa. De manera similar, puede ver la validación cruzada como una forma de estimar el rendimiento "verdadero" de un modelo al promediar el rendimiento en múltiples divisiones de datos de entrenamiento / prueba.


1) ¿Dónde más se usan estas semillas para la generación de números aleatorios? Digamos por RandomForestClassifier, un número aleatorio puede usarse para encontrar un conjunto de características aleatorias para construir un predictor. Los algoritmos que utilizan submuestreo pueden usar números aleatorios para obtener submuestras diferentes. ¿Puede / es la misma semilla (estado_aleatorio) jugar un papel en múltiples generaciones de números aleatorios?

random_state se usa donde sea que se necesite aleatoriedad :

Si su código se basa en un generador de números aleatorios, nunca debe usar funciones como numpy.random.random o numpy.random.normal . Este enfoque puede llevar a problemas de repetibilidad en pruebas unitarias. En su lugar, se debe usar un objeto numpy.random.RandomState , que se random_state partir de un argumento de estado random_state que se pasa a la clase o función.

2) qué tan extenso es el efecto de esta variable de estado_aleatorio. ? ¿Puede el valor hacer una gran diferencia en la predicción (clasificación o regresión). En caso afirmativo, ¿qué tipo de conjuntos de datos debería preocuparme más? ¿O se trata más de estabilidad que de calidad de resultados?

Los buenos problemas no deberían depender demasiado del random_state .

3) Si puede hacer una gran diferencia, ¿cuál es la mejor manera de elegir ese estado_aleatorio ?. Es difícil hacer GridSearch, sin una intuición. Especialmente si el conjunto de datos es tal que un CV puede tomar una hora.

No lo elijas En su lugar, intente optimizar los otros aspectos de la clasificación para lograr buenos resultados, independientemente del random_state .

4) Si el motivo es solo tener un resultado / evaluación constante de mis modelos y puntajes de validación cruzada en carreras repetidas, ¿tiene el mismo efecto si configuro random.seed (X) antes de usar cualquiera de los algoritmos (y uso random_state como ninguno).

A partir de ¿Debería usar `random.seed` o` numpy.random.seed` para controlar la generación de números aleatorios en `scikit-learn`? , random.seed(X) no es utilizado por sklearn. Si necesita controlar esto, puede establecer np.random.seed() lugar.

5) Supongamos que estoy usando un valor de estado aleatorio en un clasificador basado en gradiente, y estoy validando de forma cruzada para encontrar la bondad de mi modelo (puntuación en el conjunto de validación cada vez). Una vez satisfecho, entrenaré mi modelo en todo el conjunto de entrenamiento antes de aplicarlo en el conjunto de prueba. Ahora, el conjunto de entrenamiento completo tiene más instancias que los conjuntos de entrenamiento más pequeños en la validación cruzada. Entonces, el valor de estado aleatorio ahora puede dar como resultado un comportamiento completamente diferente (elección de características y predictores individuales) en comparación con lo que estaba sucediendo dentro del ciclo de cv. De manera similar, cosas como hojas de muestras mínimas, etc. también pueden dar como resultado un modelo inferior ahora que la configuración es el número de instancias en CV, mientras que el número real de instancias es mayor. ¿Es esto una comprensión correcta? ¿Cuál es el enfoque para protegerse de esto?

¿Cómo puedo saber que los datos de capacitación son suficientes para que las respuestas de Machine Learning indiquen que cuantos más datos, mejor?

Si haces un montón de selección de modelos, quizás Sacred puede ayudar también. Entre otras cosas, establece y puede registrar la semilla aleatoria para cada evaluación, por ej .:

>>./experiment.py with seed=123