Elija elementos de la Lista con diferente probabilidad en Python

¿Alguna vez te has preguntado cómo seleccionar elementos aleatorios de una lista con diferente probabilidad en Python? En este artículo, discutiremos cómo hacer lo mismo. Consideremos primero el siguiente ejemplo.

Python3

import random
  
sam_Lst = [10, 20, 3, 4, 100]
ran = random.choice(sam_Lst)
print(ran)

En el ejemplo anterior, la probabilidad de obtener cualquier elemento de la lista es igual. Pero queremos métodos en los que la probabilidad de elegir un elemento de la lista sea diferente. Esto se conoce como la elección aleatoria ponderada en Python. Para encontrar opciones aleatorias ponderadas en Python, existen dos formas:

  1. Pesos relativos
  2. Pesos acumulativos

La función que nos ayudará en esta situación es random.choices() . Esta función permite realizar elecciones aleatorias ponderadas en python con reemplazo.

Sintaxis:

random.choices(población, pesos=Ninguno, *, cum_weights=Ninguno, k=1)

Aquí, el parámetro ‘peso’ juega un papel importante.

Caso 1: uso de pesos relativos 

El peso asignado a un elemento se conoce como peso relativo.

Ejemplo 1: 

Python3

import random
  
# Creating a number list
num_lst = [1, 22, 43, 19, 13, 29]
  
print(random.choices(num_lst, weights=(
  14, 25, 30, 45, 55, 10), k=6))

Producción:

[19, 19, 13, 22, 13, 13]

En el ejemplo anterior, asignamos pesos a cada elemento de la lista. El peso del elemento ‘ 13′ es el más alto, es decir, 55, por lo que la probabilidad de que ocurra es máxima. Como podemos ver en la salida, el elemento 13 ocurre 3 veces, el 19 ocurre 2 veces y así sucesivamente. Entonces, ahora la probabilidad de elegir un elemento de la lista es diferente. 

Ejemplo 2: 

Python3

import random
  
# Creating a name list
name_lst = ['October', 'November', 'December',
            'January', 'March', 'June']
  
print(random.choices(name_lst, weights=(
    40, 25, 30, 5, 15, 80), k=3))

Producción:

['June', 'October', 'June']

En el ejemplo anterior, el peso del elemento ‘ Junio’ es máximo, por lo que su probabilidad de selección será máxima. Y aquí, k=3, lo que significa que estamos eligiendo solo los 3 elementos principales de la lista.

Ejemplo 3:

Python3

import random
  
# Creating a name list
name_lst = ['Fit', 'Infected', 'Recovered', 'Danger']
  
# Using FOR loop
# to choose the element from list with
# different probability
for i in range(6):
    print("Random choice", i+1)
      
    randomele = random.choices(name_lst, weights=(
      50, 80, 10, 5), k=1)
      
    print(randomele[0])

Producción:

Random choice 1
Recovered
Random choice 2
Danger
Random choice 3
Infected
Random choice 4
Infected
Random choice 5
Infected
Random choice 6
Fit

En el ejemplo anterior, usamos el bucle FOR para elegir un elemento de una lista con una probabilidad diferente.

Caso 2: uso de pesos acumulativos

El peso acumulado de un elemento se determina sumando el peso de su elemento anterior y su propio peso.

Ejemplo 1: 

Python3

import random
  
# Creating a number list
num_lst = [1, 22, 93, 19, 13, 25]
  
print(random.choices(num_lst, cum_weights=(
    7, 13, 15, 20, 25, 20), k=6))

Producción:

[1, 22, 93, 22, 19, 1]

En el ejemplo anterior, el peso acumulado del elemento ‘ 19′ es máximo, por lo que la probabilidad de su selección también será máxima.

Ejemplo 2:

Python3

import random
  
# Creating a name list
name_lst = ['October', 'November', 'December',
            'January', 'March', 'June']
  
print(random.choices(name_lst, cum_weights=(
  40, 20, 3, 7, 15, 15), k=3))

Producción:

['January', 'March', 'January']

En el ejemplo anterior, elegimos k=3 para obtener los 3 elementos principales que tienen la máxima probabilidad de selección.

Ejemplo 3:

Python3

import random
  
# Creating a name list 
name_lst = ['October', 'November', 'December', 
            'January', 'March', 'June']
  
# Using FOR loop
# to choose the element from list with
# different probability
for i in range(6):
    print("Random choice", i+1)
      
    randomele = random.choices(name_lst, cum_weights=(
      7, 13, 15, 20, 25, 20), k=1)
      
    print(randomele[0])

Producción:

Random choice 1
November
Random choice 2
January
Random choice 3
October
Random choice 4
December
Random choice 5
November
Random choice 6
January

En el ejemplo anterior, usamos el bucle FOR para elegir un elemento de una lista con una probabilidad diferente.

Nota: El valor de k depende de los usuarios, y de su peso relativo por lo que la suma total de pesos puede exceder 100.

Publicación traducida automáticamente

Artículo escrito por vanshgaur14866 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 *