¿Cómo obtener una elección aleatoria ponderada en Python?

Las elecciones aleatorias ponderadas significan seleccionar elementos aleatorios de una lista o una array según la probabilidad de ese elemento. Podemos asignar una probabilidad a cada elemento y de acuerdo a ese elemento(s) serán seleccionados. Mediante esto, podemos seleccionar uno o más de un elemento de la lista, y se puede lograr de dos formas.

  1. Por opciones aleatorias()
  2. Por numpy.random.choice()

Usando el método Random.choices()

opciones() pesoscum_pesos

Sintaxis: random.choices(secuencia, pesos=Ninguno, cum_weights=Ninguno, k=1)

Parámetros:
1. secuencia es un parámetro obligatorio que puede ser una lista, una tupla o una string.
2. pesos es un parámetro opcional que se utiliza para sopesar la posibilidad de cada valor.
3. cum_weights es un parámetro opcional que se utiliza para sopesar la posibilidad de cada valor pero en este se acumula la posibilidad
4. k es un parámetro opcional que se utiliza para definir la longitud de la lista devuelta.

Ejemplo 1:

Python3

import random
  
  
sampleList = [100, 200, 300, 400, 500]
  
randomList = random.choices(
  sampleList, weights=(10, 20, 30, 40, 50), k=5)
  
print(randomList)

Producción:

[200, 300, 300, 300, 400]

También puede usar el parámetro cum_weight. Significa peso conmutativo. De forma predeterminada, si usamos el método anterior y enviamos pesos, esta función cambiará los pesos a peso conmutativo. Entonces, para hacer que el programa sea rápido, use cum_weight. El peso acumulado se calcula mediante la fórmula:

cum weight = weight of previous element + its own weight

let the relative weight of 5 elements are [5,10,20,30,35]

than there cum_weight will be [5,15,35,65,100]

Ejemplo:

Python3

import random
  
sampleList = [100, 200, 300, 400, 500]
randomList = random.choices(
  sampleList, cum_weights=(5, 15, 35, 65, 100), k=5)
  
print(randomList)

Producción:

[500, 500, 400, 300, 400]

Usando el método numpy.random.choice()

Si está utilizando Python anterior a la versión 3.6, debe usar la biblioteca NumPy para lograr números aleatorios ponderados. elección()

Sintaxis: numpy.random.choice(lista,k, p=Ninguno)

Lista: Es la lista original de la que ha seleccionado números aleatorios.

k: Es el tamaño de la lista de retorno. es decir, el número de elementos que desea seleccionar.

p: Es la probabilidad de cada elemento.

Nota: la suma total de la probabilidad de todos los elementos debe ser igual a 1.

Ejemplo:

Python

from numpy.random import choice
  
sampleList = [100, 200, 300, 400, 500]
randomNumberList = choice(
  sampleList, 5, p=[0.05, 0.1, 0.15, 0.20, 0.5])
  
print(randomNumberList)

Producción:

[200 400 400 200 400]

Publicación traducida automáticamente

Artículo escrito por AshishVishwakarma1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *