python Remarque: que signifie définir une graine avec la génération de nombres aléatoires?

Motivation

Lorsque je lisais "Explication détaillée du traitement des données de séries chronologiques Tensorflfow / Keras" publié vers mai de cette année, générez des nombres aléatoires. La partie est sortie.

Il a été dit que la graine était définie pour générer le même nombre aléatoire à chaque fois, mais je n'ai pas compris la description ici, alors je l'ai vérifiée brièvement.

Nombre pseudo aléatoire

Le nombre aléatoire généré par la fonction aléatoire est un nombre pseudo aléatoire. [Pseudo Random-Wikipedia](https://ja.wikipedia.org/wiki/Pseudo Random) En premier lieu, un nombre pseudo-aléatoire est une valeur numérique qui ressemble à un nombre aléatoire irrégulier, mais qui est calculée comme si elle était aléatoire par un certain calcul déterministe (algorithme fixe?).

Cela signifie que la valeur numérique définie comme état initial lors du calcul du nombre pseudo aléatoire est la graine.

En définissant cette graine sur la même valeur numérique, le même nombre pseudo aléatoire est généré à chaque fois, j'ai donc essayé de générer des nombres pseudo aléatoires plusieurs fois avec la graine fixe.

rand_generation.py


import bumpy as np 

rng = np.random.RandomState(100)

for i in range(10):
  print(rng.randn(5)) #randn :Échantillonné à partir de la distribution normale standard

Résultat de la génération: [-1.74976547 0.3426804 1.1530358 -0.25243604 0.98132079] [ 0.51421884 0.22117967 -1.07004333 -0.18949583 0.25500144] [-0.45802699 0.43516349 -0.58359505 0.81684707 0.67272081] [-0.10441114 -0.53128038 1.02973269 -0.43813562 -1.11831825] [ 1.61898166 1.54160517 -0.25187914 -0.84243574 0.18451869] [ 0.9370822 0.73100034 1.36155613 -0.32623806 0.05567601] [ 0.22239961 -1.443217 -0.75635231 0.81645401 0.75044476] [-0.45594693 1.18962227 -1.69061683 -1.35639905 -1.23243451] [-0.54443916 -0.66817174 0.00731456 -0.61293874 1.29974807] [-1.73309562 -0.9833101 0.35750775 -1.6135785 1.47071387]

Oh, je pensais que ce serait un nombre aléatoire différent à chaque fois qu'il était généré, mais il semble que la deuxième génération et les suivantes seront nouvellement générées en fonction du nombre aléatoire généré précédemment. https://teratail.com/questions/15388 (J'ai utilisé ceci comme référence.)

Dans le script ci-dessus, la valeur de départ est fixée à 100 et une liste de nombres pseudo aléatoires de longueur 5 est générée 10 fois (c'est-à-dire que le nombre aléatoire est généré 50 fois?), Donc c'est différent à chaque fois.

Lorsque j'ai exécuté à nouveau le même script, le même nombre aléatoire a été généré.

En utilisant la même graine, le même algorithme génère toujours le même premier nombre pseudo-aléatoire. ↓ Un deuxième nombre pseudo-aléatoire est généré sur la base du premier nombre pseudo-aléatoire, donc si le premier est toujours le même, le second est toujours le même ...

Cela signifie répéter. Le fait que le même nombre pseudo-aléatoire soit généré à chaque fois signifie que la même séquence de nombres pseudo-aléatoires est générée à partir du moment où la valeur de départ est définie. (Si vous y réfléchissez, ce n'est plus un nombre aléatoire si le même nombre aléatoire est toujours généré.)

Même en apprentissage automatique, si vous souhaitez évaluer les performances à l'aide de valeurs numériques aléatoires, si vous utilisez des nombres aléatoires différents à chaque fois, vous ne savez peut-être pas s'il s'agit de la différence de performances due à la différence de nombres aléatoires ou au résultat d'une amélioration des paramètres, etc. Il semble qu'il existe diverses utilisations.

À propos, si vous ne définissez pas de graine, il semble que vous puissiez garantir que la graine sera différente à chaque fois en utilisant l'heure système comme graine. Était-ce un tel gâchis? https://docs.scipy.org/doc/numpy/reference/generated/numpy.random.RandomState.html (J'ai utilisé ceci comme référence.)

Si quelqu'un le connaît ...

Cela signifie-t-il que le n-1er nombre pseudo-aléatoire est la graine lors de la génération du nième nombre pseudo-aléatoire?

Recommended Posts

python Remarque: que signifie définir une graine avec la génération de nombres aléatoires?
Notez ce que vous avez fait pour utiliser Flycheck avec Python
Que signifie le dernier () dans une fonction en Python?
[python] Mémorandum de génération aléatoire
[python] Remarques lors de la tentative d'utilisation de numpy avec Cython
[Python] Qu'est-ce qu'un tuple? Explique comment utiliser sans toucher et comment l'utiliser avec des exemples.
[Python] Qu'est-ce qu'une instruction with?
[Python] Qu'est-ce qu'une tranche? Une explication facile à comprendre de son utilisation avec un exemple concret
générateur de nombres aléatoires français avec python
Que faire avec la sortie de PYTHON?
[Python] Qu'est-ce qu'un argument formel? Comment définir la valeur initiale
Que signifie passer par le PATH? Où sont les commandes?
Envoyez du courrier avec mailx à un serveur SMTP factice configuré avec python.
Essayez de résoudre un problème défini de mathématiques au lycée avec Python
Essayer de gérer SQLite3 avec Python [Note]
Ce que j'ai fait avec les tableaux Python
Quand j'ai essayé de créer un environnement virtuel avec Python, cela n'a pas fonctionné
Créer un outil de génération de documents Python car il est difficile d'utiliser sphinx
Une note à laquelle j'étais accro lors de l'exécution de Python avec Visual Studio Code
Notez que j'étais accro à la configuration de TensowFlow
Comment lire un fichier CSV avec Python 2/3
Envoyer un message à LINE avec Python (LINE Notify)
Essayez de dessiner une courbe de vie avec python
Je veux faire un jeu avec Python
[Note] Créez une classe de fuseau horaire sur une ligne avec python
Essayez de créer un code de "décryptage" en Python
Décidez d'une mission de laboratoire avec Python (fiction)
Remarque Python: lors de l'attribution d'une valeur à une chaîne
Pourquoi Python doit-il écrire un deux-points?
Étapes pour créer un bot Twitter avec Python
Essayez de créer un groupe de dièdre avec Python
Juger s'il s'agit d'un nombre premier [Python]
J'ai fait un graphique de nombres aléatoires avec Numpy
Je veux écrire dans un fichier avec Python
Zubu amateur veut démarrer Python
Script Python pour obtenir des informations de note avec REAPER
Comment identifier l'élément avec le plus petit nombre de caractères dans une liste Python?
Bash (Shell Script), je déteste plus: ce que j'ai recherché pour remplacer Bash par Python 3.x
[Introduction au trading système] J'ai dessiné un oscillateur stochastique avec python et joué avec ♬
Créez rapidement un tableau de bord d'analyse de données Python avec Streamlit et déployez-le sur AWS
Comment convertir / restaurer une chaîne avec [] en python
[Python] Comment dessiner un graphique linéaire avec Matplotlib
Comment configurer un environnement Python à l'aide de pyenv
Python Ver. Présentation de WebPay avec un peu de code
Note de lecture: Introduction à l'analyse de données avec Python
Je veux travailler avec un robot en python.
Choses à noter lors de l'initialisation d'une liste en Python
De l'achat d'un ordinateur à l'exécution d'un programme sur python
[Python] Un mémo pour écrire du CSV verticalement avec Pandas
Remarques sur l'accélération du code Python avec Numba
[Python] Comment créer un histogramme bidimensionnel avec Matplotlib
Qu'est-ce que Dieu? Créez un chatbot simple avec python
Je veux faire fonctionner un ordinateur quantique avec Python
[Python] Comment dessiner un diagramme de dispersion avec Matplotlib
Configurer un environnement de développement Python avec Sublime Text 2
[Vagrant] Configurer un serveur API simple avec python