Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1435 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  [Python] Sous échantillon aléatoire pas vraiment aléatoire! Pourquoi ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Python] Sous échantillon aléatoire pas vraiment aléatoire! Pourquoi ?

n°2303119
Swiss_Knig​ht
600 MeV since 1957.
Posté le 09-07-2017 à 20:07:51  profilanswer
 

Bonjour, :hello:

 

j'ai un script Python qui sélectionne de manière aléatoire un sous-ensemble d'une taille déterminée (50) de paires de valeurs parmi un ensemble d'origine plus grand (2000).
Aléatoire ?
Ben non !

 

Et ça m'embête beaucoup.

 


Je m'explique...

 

En gros j'ai un array X et un autre y représentant un nuage de points. Y a 2000 points dans chaque vecteur.
Je fais un plot(X,y) ça me fait un joli dessin. Bien.

 

Si je stack X et y dans un array de dimensions (2000,2) pour ensuite faire :

Code :
  1. XY = np.hstack((X,y.reshape(2000,1)))
  2. idx = np.random.randint(2000, size=50)
  3. Xsub  = Xysub[:,0].reshape(M,1)
  4. ysub  = Xysub[:,1].reshape(M,1)
 

Ben j'extrais un sous-échantillons de 50 pairs (X,y).
Si je les plot, ça va bien.

 

Le hic c'est que quand je lance ce script une deuxième, puis une troisième, puis une n-ième fois, il me retrouve systématiquement les mêmes 50 paires qu'il était censé trouvé de manière aléatoire pourtant !

 


Questions :

 

1. Pourquoi tant de systématisme dans ce qui devrait être du hasard ?

 

2. Comment s'appelle ce phénomène ?

 

3. Comment l'éviter, i.e. donc comment avoir réellement 50 autres paires choisies de manière aléatoire dans mon jeu de données lorsque je lance le script plusieurs fois ?

  

Merci beaucoup pour vos éclairages :jap:


Message édité par Swiss_Knight le 09-07-2017 à 20:09:12

---------------
Hergestellt in der Schweiz.
mood
Publicité
Posté le 09-07-2017 à 20:07:51  profilanswer
 

n°2303121
Swiss_Knig​ht
600 MeV since 1957.
Posté le 09-07-2017 à 20:40:11  profilanswer
 

Pour la postérité; apparemment ça ça marche mieux :
https://docs.python.org/2/library/random.html
 

Code :
  1. r  = random.SystemRandom()
  2. idx = r.sample(range(2000), 50)
  3. Xy_subsampled = Xys[idx,:]


---------------
Hergestellt in der Schweiz.
n°2303130
The_Kid
Call me Billy
Posté le 10-07-2017 à 09:16:00  profilanswer
 

Les nombres aléatoires en informatique sont calculées à partir de seed. On appelle cela des générateurs de nombre pseudo aléatoires.
Il s'agit généralement d'une suite arithmétique qui dépend d'une entrée x et défois d'autres facteurs.
La méthode rand de posix fonctionne de la même manière et renverra toujours le même suite de nombre.

 


Il y a plusieurs méthodes

 

On peut prendre par exemple une suite de Fibonacci et l'appliquer un modulo en sortit
https://wikimedia.org/api/rest_v1/media/math/render/svg/0b6e8c6a4eecbbdb3a976f2a502fba620aae3be2

 

Ou des suites simples
https://wikimedia.org/api/rest_v1/media/math/render/svg/8e5c64e5830d332220bc6cc9fb310e20ec824dc7

 

En cryptographie on a recourt souvent a des registres à décallages gauches (LFSR)
On charge un nombre dans un de ces registres et on applique des décallages de bits successifs.

 

Pour éviter ce genre de phénomènes les générateurs peuvent prendre des entrées à valeur variables, comme par exemple le temps, l'heure actuel, l'état de la mémoire etc...

 

pour numpy voila un post qui décrit ton problème.

 

https://stackoverflow.com/questions [...] m-seed0-do

 

si tu changes numpy.random.seed(0) par numpy.random.seed(time)
tu obtiendras des suites différentes, voila.


Message édité par The_Kid le 10-07-2017 à 09:31:08

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  [Python] Sous échantillon aléatoire pas vraiment aléatoire! Pourquoi ?

 

Sujets relatifs
Tirage aleatoire sans remiseProblème aléatoire sur les web services
Ordre aléatoire d'exécution + duplication traitement d'un BATValeur de variable aléatoire / intervalle de temps
Sockets TCP - pourquoi recv() peut etre aleatoire ?? (paquets tronqués[SSRS] Performance aléatoire
Nombre aléatoire, arraylist (quizz, question)Besoin d'aide su javascool (génération aléatoire d'image)
Je n'y arrive vraiment pas ='( 
Plus de sujets relatifs à : [Python] Sous échantillon aléatoire pas vraiment aléatoire! Pourquoi ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR