Nombre aléatoire-Set.seed (N) in R [dupliquer]

38

Cette question a déjà une réponse ici:

Je me rends compte que l’on utilise set.seed()en R pour la génération de nombres pseudo-aléatoires. Je me rends également compte qu’utiliser le même numéro, comme pour set.seed(123)vous assurer de pouvoir reproduire les résultats.

Mais ce que je ne comprends pas, c'est ce que signifient les valeurs elles-mêmes. Je joue avec plusieurs fonctions, et certaines utilisent set.seed(1)ou set.seed(300)ou set.seed(12345). Qu'est-ce que ce nombre signifie (le cas échéant) - et quand devrais-je utiliser un autre.

Par exemple, dans un livre sur set.seed(12345)lequel je travaille, ils l'utilisent pour créer un ensemble de formation pour les arbres de décision. Puis, dans un autre chapitre, ils utilisent set.seed(300)pour créer une forêt aléatoire.

Juste ne pas obtenir le nombre.

mylesg
la source
6
est-ce que cela aide? stackoverflow.com/questions/14684437/… De plus, set.seed () dans R fournit de très bonnes informations.
Doug
6
Le principal avantage de l'utilisation de la graine est de pouvoir reproduire une séquence particulière de nombres «aléatoires». De manière générale, si vous n'avez pas besoin de pouvoir le faire, vous ne planterez pas la graine. La graine elle-même n'a pas de signification inhérente, sauf que c'est un moyen de dire au générateur de nombres aléatoires «par où commencer». Vous pourriez penser à cela un peu comme la relation entre un code PIN et votre compte bancaire. Le code PIN est associé à une longue chaîne de chiffres (votre numéro de compte), mais ce n'est pas en soi une quantité interprétable (il existe une interprétation, mais si vous le définissez, vous l'ignorez).
Glen_b -Reinstate Monica
4
Pour l'anecdote, 42 est toujours la bonne graine
Repmat
Juste un commentaire: je recommande de ne configurer que le générateur aléatoire (i) pour déboguer un script, pour rechercher des erreurs particulières, etc. ou (ii) pour envoyer / publier les résultats afin qu’ils puissent être vérifiés.
AADF

Réponses:

39

Le numéro de départ que vous choisissez est le point de départ utilisé dans la génération d'une séquence de nombres aléatoires. C'est pourquoi (si vous utilisez le même générateur de nombres pseudo-aléatoires), vous obtenez les mêmes résultats pour le même numéro d'origine. En ce qui concerne votre deuxième question, ce court extrait de la description de la fonctionnalité équivalente dans Stata pourrait être utile:

Nous ne saurions trop insister sur ce point: ne plantez pas la graine trop souvent. Pour voir pourquoi c'est une si mauvaise idée, considérons le cas limite: vous définissez le germe, tracez un nombre pseudo-aléatoire, réinitialisez le germe, dessinez à nouveau, puis continuez. Les nombres pseudo-aléatoires que vous obtiendrez ne seront rien de plus que les germes que vous exécuterez dans une fonction mathématique. Les résultats que vous obtenez ne passeront pas au hasard, à moins que les graines que vous choisissez passent au hasard. Si vous avez déjà eu de tels numéros, pourquoi vous dérangez-vous même d'utiliser le générateur de nombres pseudo-aléatoires?

http://www.stata.com/manuals13/rsetseed.pdf

Corcovado
la source
15
Qui savait que Stata possédait une documentation aussi intéressante: "D'autres essaient de composer un nombre aléatoire, en se disant que s'ils incluent suffisamment de chiffres, le résultat doit être aléatoire. Il s'agit d'une variante de la règle des cinq secondes pour les aliments perdus, à utiliser ces deux règles "
hessian dégénéré
4

En bref, les chiffres eux-mêmes ne veulent rien dire! Si vous consultez le code de quelqu'un d'autre (comme dans les deux exemples que vous avez donnés ci-dessus), les chiffres ne modifient pas la fonctionnalité de la fonction. il n'y a pas non plus de "bons" chiffres pour des fonctions spécifiques. C'est juste au choix des auteurs.

En outre, si vous ne définissez qu'une seule fois la valeur de départ dans votre code, vous pouvez en quelque sorte choisir le nombre de votre choix. La seule chose à laquelle vous devez faire attention, c'est que, si vous vous connectez à d'autres fonctions qui utilisent également des nombres aléatoires, il est bon de choisir une valeur de départ non évidente (il est donc moins probable que vous utilisiez la même valeur de départ. )

Cependant, comme le souligne très gentiment Corcovado, pour certaines applications, vous devez faire très attention au choix que vous faites. Si, mathématiquement, vous avez besoin d'un nombre de nombres générés de manière pseudo-aléatoire, il ne peut y avoir de motif pour les nombres que vous choisissez.

KRS
la source
1

La fonction set.seed () dans R prend un argument entier (arbitraire). Nous pouvons donc prendre n'importe quel argument, par exemple, 1, 123, 300 ou 12345 pour obtenir les nombres aléatoires reproductibles.

De plus, dans le package TeachingDemos, la fonction char2seed permet à l’utilisateur de définir la valeur de départ en fonction d’une chaîne de caractères.

Dr Nisha Arora
la source