Gewichtete Zufallsauswahl mit Python

Lakshay Kapoor 10 Oktober 2023
  1. Verwenden Sie die Funktion random.choices(), um gewichtete Zufallsauswahlen zu generieren
  2. Verwenden Sie die Funktion numpy.random.choice(), um gewichtete Zufallsauswahlen zu generieren
Gewichtete Zufallsauswahl mit Python

In Python können wir ganz einfach Zufallszahlen mit Random- und NumPy-Bibliotheken generieren.

Die Auswahl zufälliger Elemente aus einer Liste oder einem Array nach dem wahrscheinlichen Ergebnis des Elements wird als gewichtete Zufallsauswahl bezeichnet. Die Auswahl eines Elements wird bestimmt, indem jedem vorhandenen Element eine Wahrscheinlichkeit zugewiesen wird. Manchmal wird auch mehr als ein Element aus der Liste der erstellten Elemente ausgewählt.

In diesem Tutorial werden wir diskutieren, wie man in Python gewichtete Zufallsauswahlen generiert.

Verwenden Sie die Funktion random.choices(), um gewichtete Zufallsauswahlen zu generieren

Hier wird das Modul random von Python verwendet, um Zufallszahlen zu erzeugen.

In der Funktion choices() werden gewichtete Zufallsauswahlen mit Ersetzung getroffen. Sie wird auch als gewichtete Zufallsstichprobe mit Ersatz bezeichnet. Auch in dieser Funktion spielen Gewichte eine wesentliche Rolle. Gewichtungen definieren das wahrscheinliche Ergebnis der Auswahl jedes Elements. Es gibt zwei Arten von Gewichten:

  1. Relative Gewichte
  2. Kumulative Gewichte

Wählen Sie Elemente mit relativer Gewichtung

Der Parameter weights definiert die relativen Gewichte. Das wahrscheinliche Ergebnis ist für jedes Element in der Liste unterschiedlich. Wenn das wahrscheinliche Ergebnis für jedes Element unter Verwendung der relativen Gewichtungen festgelegt wurde, erfolgt die Auswahl nur auf der Grundlage der relativen Gewichtungen.

Hier ist ein Beispiel:

import random

List = [12, 24, 36, 48, 60, 72, 84]
print(random.choices(List, weights=(30, 40, 50, 60, 70, 80, 90), k=7))

Hier erhält jedes Element in der Liste sein eigenes Gewicht, d. h. das wahrscheinliche Ergebnis. Außerdem ist k im obigen Beispiel die Anzahl der Elemente, die aus der gegebenen Liste benötigt werden.

Ausgabe:

[60, 84, 36, 72, 84, 84, 60]

Hier beträgt die Gesamtsumme der Gewichtungen nicht 100, da es sich um relative Gewichte und nicht um Prozentsätze handelt. Die Zahl 84 ist dreimal aufgetreten, da sie das höchste Gewicht aller Gewichte hat. Die Wahrscheinlichkeit seines Auftretens wird also am höchsten sein.

Wählen Sie Elemente mit kumulativen Gewichten

Mit dem Parameter cum_weight werden die kumulierten Gewichte definiert. Die kumulative Gewichtung eines Elements wird durch die Gewichtung des vorhergehenden Elements plus die relative Gewichtung dieses Elements bestimmt. Zum Beispiel entsprechen die relativen Gewichtungen [10, 20, 30, 40] den kumulativen Gewichten [10, 30, 60, 100]

Hier ist ein Beispiel:

import random

List = [13, 26, 39, 52, 65]
print(random.choices(List, cum_weights=(10, 30, 60, 100, 150), k=5))

Ausgabe:

[65, 65, 39, 13, 52]

Auch hier kommt die Zahl 65 häufiger vor als jede andere Zahl, da sie das höchste Gewicht hat.

Verwenden Sie die Funktion numpy.random.choice(), um gewichtete Zufallsauswahlen zu generieren

Zum Generieren von zufällig gewichteten Auswahlmöglichkeiten wird NumPy im Allgemeinen verwendet, wenn ein Benutzer die Python-Version unter 3.6 verwendet.

Hier wird numpy.random.choice verwendet, um die Wahrscheinlichkeitsverteilung zu bestimmen. Bei dieser Methode werden zufällige Elemente eines 1D-Arrays genommen und zufällige Elemente eines numpy-Arrays mit der Funktion choice() zurückgegeben.

import numpy as np

List = [500, 600, 700, 800]
sNumbers = np.random.choice(List, 4, p=[0.10, 0.20, 0.30, 0.40])
print(sNumbers)

Hier sollte die Wahrscheinlichkeit gleich 1 sein. Die Zahl 4 steht für die Größe der Liste.

Ausgabe:

[800 500 600 800]
Lakshay Kapoor avatar Lakshay Kapoor avatar

Lakshay Kapoor is a final year B.Tech Computer Science student at Amity University Noida. He is familiar with programming languages and their real-world applications (Python/R/C++). Deeply interested in the area of Data Sciences and Machine Learning.

LinkedIn

Verwandter Artikel - Python Random