Quiero implementar un algoritmo de aprendizaje automático en scikit learn, pero no entiendo qué hace este parámetro random_state
. ¿Por qué debería usarlo?
Tampoco pude entender qué es un número pseudoaleatorio.
fuente
Quiero implementar un algoritmo de aprendizaje automático en scikit learn, pero no entiendo qué hace este parámetro random_state
. ¿Por qué debería usarlo?
Tampoco pude entender qué es un número pseudoaleatorio.
train_test_split
divide matrices o matrices en trenes aleatorios y subconjuntos de prueba. Eso significa que cada vez que lo ejecute sin especificar random_state
, obtendrá un resultado diferente, este es el comportamiento esperado. Por ejemplo:
Ejecución 1:
>>> a, b = np.arange(10).reshape((5, 2)), range(5)
>>> train_test_split(a, b)
[array([[6, 7],
[8, 9],
[4, 5]]),
array([[2, 3],
[0, 1]]), [3, 4, 2], [1, 0]]
Correr 2
>>> train_test_split(a, b)
[array([[8, 9],
[4, 5],
[0, 1]]),
array([[6, 7],
[2, 3]]), [4, 2, 0], [3, 1]]
Cambia. Por otro lado, si lo usa random_state=some_number
, puede garantizar que la salida de la ejecución 1 será igual a la salida de la ejecución 2 , es decir, su división será siempre la misma. No importa cuál sea el random_state
número real 42, 0, 21, ... Lo importante es que cada vez que use 42, siempre obtendrá la misma salida la primera vez que realice la división. Esto es útil si desea resultados reproducibles, por ejemplo en la documentación, para que todos puedan ver los mismos números de manera consistente cuando ejecutan los ejemplos. En la práctica, diría que debe establecer random_state
un número fijo mientras prueba cosas, pero luego eliminarlo en producción si realmente necesita una división aleatoria (y no fija).
Con respecto a su segunda pregunta, un generador de números pseudoaleatorios es un generador de números que genera números casi verdaderamente aleatorios. Por qué no son realmente aleatorios está fuera del alcance de esta pregunta y probablemente no importará en su caso, puede echar un vistazo aquí para obtener más detalles.
Si no especifica el
random_state
en su código, cada vez que ejecuta (ejecuta) su código, se genera un nuevo valor aleatorio y el tren y los conjuntos de datos de prueba tendrían valores diferentes cada vez.Sin embargo, si se asigna un valor fijo como
random_state = 42
entonces, no importa cuántas veces ejecute su código, el resultado sería el mismo, es decir, los mismos valores en los conjuntos de datos de tren y prueba.fuente
Si no menciona random_state en el código, cada vez que ejecute su código se generará un nuevo valor aleatorio y el tren y los conjuntos de datos de prueba tendrán valores diferentes cada vez.
Sin embargo, si usa un valor particular para random_state (random_state = 1 o cualquier otro valor) cada vez que el resultado sea el mismo, es decir, los mismos valores en los conjuntos de datos de tren y prueba. Consulte el siguiente código:
No importa cuántas veces ejecute el código, el resultado será 70.
Intenta eliminar random_state y ejecuta el código.
Ahora aquí la salida será diferente cada vez que ejecute el código.
fuente
random_state number divide los conjuntos de datos de prueba y entrenamiento de manera aleatoria. Además de lo que se explica aquí, es importante recordar que el valor de random_state puede tener un efecto significativo en la calidad de su modelo (por calidad me refiero a la precisión para predecir). Por ejemplo, si toma un determinado conjunto de datos y entrena un modelo de regresión con él, sin especificar el valor de random_state, existe la posibilidad de que cada vez obtenga un resultado de precisión diferente para su modelo entrenado en los datos de prueba. Por lo tanto, es importante encontrar el mejor valor de random_state para proporcionarle el modelo más preciso. Y luego, ese número se utilizará para reproducir su modelo en otra ocasión, como otro experimento de investigación. Para hacerlo
fuente
Si no hay un estado aleatorio siempre que el sistema utilice un estado aleatorio que se genera internamente. Entonces, cuando ejecuta el programa varias veces, puede ver diferentes puntos de datos de tren / prueba y el comportamiento será impredecible. En caso de que tenga un problema con su modelo, no podrá volver a crearlo, ya que no conoce el número aleatorio que se generó cuando ejecutó el programa.
Si ve los clasificadores de árbol, ya sea DT o RF, intentan crear una prueba utilizando un plan óptimo. Aunque la mayoría de las veces este plan podría ser el mismo, podría haber casos en los que el árbol podría ser diferente y, por lo tanto, las predicciones. Cuando intenta depurar su modelo, es posible que no pueda recrear la misma instancia para la que se creó un Árbol. Por lo tanto, para evitar toda esta molestia, usamos random_state al construir un DecisionTreeClassifier o RandomForestClassifier.
PD: Puede profundizar un poco sobre cómo se construye el Árbol en DecisionTree para comprenderlo mejor.
randomstate se usa básicamente para reproducir su problema de la misma manera cada vez que se ejecuta. Si no utiliza un estado aleatorio en traintestsplit, cada vez que realice la división, puede obtener un conjunto diferente de puntos de datos de prueba y tren y no lo ayudará a depurar en caso de que surja un problema.
De Doc:
Si int, randomstate es la semilla utilizada por el generador de números aleatorios; Si es una instancia RandomState, randomstate es el generador de números aleatorios; Si no hay ninguno, el generador de números aleatorios es la instancia RandomState utilizada por np.random.
fuente
Dividir matrices o matrices en trenes aleatorios y subconjuntos de prueba
Si int, random_state es la semilla utilizada por el generador de números aleatorios; Si es una instancia RandomState, random_state es el generador de números aleatorios; Si no hay ninguno, el generador de números aleatorios es la instancia RandomState utilizada por np.random. fuente: http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html
'' 'Con respecto al estado aleatorio, se utiliza en muchos algoritmos aleatorios en sklearn para determinar la semilla aleatoria pasada al generador de números pseudoaleatorios. Por lo tanto, no gobierna ningún aspecto del comportamiento del algoritmo. Como consecuencia, los valores de estado aleatorio que funcionaron bien en el conjunto de validación no corresponden a los que funcionarían bien en un nuevo conjunto de prueba invisible. De hecho, dependiendo del algoritmo, puede ver resultados completamente diferentes simplemente cambiando el orden de las muestras de entrenamiento '' 'fuente: /stats/263999/is-random-state-a-parameter sintonizar
fuente