Page 1 of 1

Probenahme ohne Ersatz bei ungleichen Gewichten

Posted: 25 Dec 2024, 22:51
by Guest
Ich versuche, einen Algorithmus zu finden, der 12 Elemente aus einer Liste von 25 entsprechend der Wahrscheinlichkeit jedes einzelnen von ihnen auswählt. Diese Elemente können nicht wiederholt werden.
Ich habe versucht, die Funktion ohne Ersatz zu verwenden, aber ich schaffe es nicht, die Gewichte beizubehalten, wenn ich 1000 Iterationen durchführe um zu überprüfen, ob es richtig gemacht wurde. Das ist mir nur gelungen, wenn ich die Funktion mit „replace = True“ verwende.
Da mir diese Funktion doppelte Elemente zurückgibt, bereinige ich die Liste und entferne die Duplikate. Dadurch ist die Wahrscheinlichkeit, dass ich jede Zahl erhalte, nicht die, die ich zu Beginn definiert hatte. Mir ist bewusst, dass der Fehler vorliegt und dass ich die Funktion mit „replace = False“ verwenden sollte, aber ich kann sie nicht dazu bringen, mir das Ergebnis zu liefern.

Code: Select all

import numpy as np
from collections import Counter

nameList = ['AAAAAA', 'B', 'C', 'D','E','F','G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P','Q','R','S','T','U','V','W','X','ZZZZZZZZZZZZZZZZ']
probability_nameList = [0.10, 0.01, 0.02, 0.03, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04]

sampleNames =[]
sampleNamesControl =[]
cleaned_result = []
test_list = []

for i in range(1000):
sampleNames += np.random.choice(nameList, 100,replace=True, p=probability_nameList)
for item in sampleNames:
if not item in cleaned_result:
cleaned_result += [item]
sampleNames =[]
test_list += cleaned_result[0:12]
cleaned_result = []

print(Counter(test_list))

Antwort:

Code: Select all

Counter({'AAAAAA': 832, 'F': 522, 'X': 513, 'ZZZZZZZZZZZZZZZZ': 506, 'I': 505, 'L': 504, 'N': 501, 'S': 499, 'T': 498, 'U': 496, 'R': 492, 'O': 491, 'J': 489, 'P': 488, 'E': 487, 'V': 485, 'K': 482, 'Q': 479, 'H': 473, 'G': 471, 'M': 468, 'W': 461, 'D': 404, 'C': 297, 'B': 157})
Wie Sie sehen, musste AAAAA zehnmal größer sein als B, und das passiert nicht.
P(AAAAA)= 10xP(B)