functions - ¿Qué hace numpy.random.seed(0)?
numpy python 3.6 windows (4)
Al usar np.Random.Seed (i) donde ''i'' puede ser cualquier número entero, usted se asegura de que al generar números aleatorios genere el mismo conjunto de números en una secuencia diferente cada vez hasta que se proporcione la siguiente semilla
¿Qué hace np.random.seed en el siguiente código de un tutorial de Scikit-Learn? No estoy muy familiarizado con el generador de estado aleatorio de NumPy, así que realmente agradecería la explicación de los términos de un profano.
np.random.seed(0)
indices = np.random.permutation(len(iris_X))
Como se señaló, numpy.random.seed (0) establece la semilla aleatoria en 0, por lo que los números pseudoaleatorios que obtenga al azar comenzarán desde el mismo punto. Esto puede ser bueno para la depuración en algunos casos. SIN EMBARGO, después de leerlo, esta parece ser la manera incorrecta de hacerlo, si tiene hilos porque no es seguro para subprocesos.
de differences-between-numpy-random-and-random-random-in-python :
Para numpy.random.seed (), la dificultad principal es que no es seguro para subprocesos, es decir, no es seguro de usar si tiene muchos subprocesos diferentes de ejecución, porque no se garantiza que funcione si se están ejecutando dos subprocesos diferentes la función al mismo tiempo. Si no está utilizando subprocesos, y si puede razonablemente esperar que no necesite volver a escribir su programa de esta manera en el futuro, numpy.random.seed () debería estar bien para fines de prueba. Si hay alguna razón para sospechar que puede necesitar hilos en el futuro, a la larga es mucho más seguro hacer lo que se sugiere y crear una instancia local de la clase numpy.random.Random. Por lo que puedo decir, random.random.seed () es seguro para subprocesos (o al menos, no he encontrado ninguna evidencia de lo contrario).
ejemplo de cómo hacer esto:
from numpy.random import RandomState
prng = RandomState()
print prng.permutation(10)
prng = RandomState()
print prng.permutation(10)
prng = RandomState(42)
print prng.permutation(10)
prng = RandomState(42)
print prng.permutation(10)
puede dar:
[3 0 4 6 8 2 1 9 7 5]
[1 6 9 0 2 7 8 3 5 4]
[8 1 5 0 7 2 9 4 3 6]
[8 1 5 0 7 2 9 4 3 6]
Por último, tenga en cuenta que puede haber casos en los que la inicialización a 0 (en oposición a una semilla que no tiene todos los bits 0) pueda dar lugar a distribuciones no uniformes para unas pocas primeras iteraciones debido a la forma xor funciona, pero esto depende del algoritmo , y está más allá de mis preocupaciones actuales y el alcance de esta pregunta.
np.random.seed(0)
hace predecibles los números aleatorios
>>> numpy.random.seed(0) ; numpy.random.rand(4)
array([ 0.55, 0.72, 0.6 , 0.54])
>>> numpy.random.seed(0) ; numpy.random.rand(4)
array([ 0.55, 0.72, 0.6 , 0.54])
Con el reinicio de la semilla (cada vez), el mismo conjunto de números aparecerá siempre.
Si la semilla aleatoria no se restablece, aparecen diferentes números con cada invocación:
>>> numpy.random.rand(4)
array([ 0.42, 0.65, 0.44, 0.89])
>>> numpy.random.rand(4)
array([ 0.96, 0.38, 0.79, 0.53])
Los números (pseudo-) aleatorios funcionan comenzando con un número (la semilla), multiplicándolo por un número grande, y luego tomando el módulo de ese producto. El número resultante se usa luego como la semilla para generar el siguiente número "aleatorio". Cuando configura la semilla (cada vez), hace lo mismo cada vez, proporcionándole los mismos números.
Si quiere números aparentemente aleatorios, no configure la semilla. Sin embargo, si tiene un código que usa números aleatorios que desea depurar, puede ser muy útil establecer la semilla antes de cada ejecución para que el código haga lo mismo cada vez que la ejecute.
Para obtener la mayor cantidad de números aleatorios para cada ejecución, llame a numpy.random.seed()
. This causará que numpy establezca la semilla en un número aleatorio obtenido de /dev/urandom
o su análogo de Windows o, si ninguno de estos está disponible, usará el reloj.