Python para todos: 5 formas de generar datos aleatoriosPaloma Recuero de los Santos 8 septiembre, 2020 En el primer post de esta miniserie, explicamos el motivo por el cual necesitamos generar conjuntos de datos aleatorios para entrenar nuestros modelos de aprendizaje automático. En el post de hoy, veremos 5 formas distintas de hacerlo con Python. Python para todos: ¿Por qué usamos números aleatorios ? Módulo random En el módulo random de la librería estándar de Python, podemos encontrar un un conjunto de funciones que permiten obtener números aleatorios (para ser rigurosos, en realidad son «pseudo-aleatorios»), de distintas formas. Para ello, utiliza un generador de números pseudo-aleatorios (PRNG) conocido como Mersenne Twister. Genera un número aleatorio a partir de otro número de damos como valor de entrada o semilla (seed). Se trata de un generador determinístico, ya que, a partir de la misma semilla, se obtiene siempre el mismo resultado. En el post anterior ya comentamos que estos números pseudo-aleatorios son perfectamente válidos para la mayor parte de problemas que modelizamos mediante algoritmos de machine learning. Sin embargo, no nos sirven para trabajar en entornos de criptografía y seguridad. En estos casos, se utiliza el módulo «secrets» que permite generar números verdaderamente aleatorios (true-random number generators (TRNG). 5 formas distintas de generar números aleatorios randint(): devuelve un número entero comprendido entre los valores indicados. Los valores de los límites inferior y superior también pueden aparecer entre los valores devueltos. Para números decimales (float) se usa la función uniform()randrange(): devuelve números enteros comprendidos entre un valor inicial y otro final, separados por un valor «paso» determinadochoice() y choices(), permiten seleccionar valores de una lista de forma aleatoria. Toman una lista como argumento y seleccionan aleatoriamente un valor (o valores en el caso de choices()). También, se puede aplicar una matriz con pesos para aumentar la probabilidad de que determinado valor sea elegido. shuffle(): «baraja» una lista. Esta función ‘mezcla’ o cambia aleatoriamente el orden de los elementos de una lista antes de seleccionar uno de ellosgauss(): genera un conjunto de números aleatorios cuya distribución de probabilidad es una distribución gaussiana o normal (muy frecuente en el mundo real). Existen funciones similares para otros distribuciones diferentes. Ejemplos prácticos Veamos unos sencillos ejemplos de aplicación de las funciones anteriores. En el manual de Python, se puede encontrar toda la información sobre éstas y las demás funciones del módulo random. Recordamos que, como ocurre con todas las bibliotecas, antes de utilizar una función se debe importar la función o la biblioteca entera. # Para importar la biblioteca random al completo import random # Para importar sólo determinadas funciones (randrange y choice) from random import randrange, choice Función randint() La función randint(a, b) genera un número entero entre a y b, ambos incluidos. a debe ser inferior o igual a b. Por ejemplo, para generar un número aleatorio del 1 al 10 pondríamos: # Generar un número entero aleatorio entre 10 y 20 (incluidos) print(random.randint(1, 10)) Función randrange() La función randrange() admite hasta tres argumentos (inicio, fin, paso). Por ejemplo. # Generar un número entero aleatorio entre 10 y 110 con paso 2 print(random.randrange(10, 110, 2)) Funciones choice(), choices() Estas funciones permiten elegir uno (o varios) elementos de una lista. También, como en este ejemplo, permite trabajar con cadenas de caracteres (strings) # Elegir aleatoriamente uno (o varios, en este caso 2) colores de la lista color=( ['rojo', 'amarillo', 'verde', 'azul', 'marrón', 'negro']) # Un color print (random.choice(color)) # Una pareja de colores print (random.choices(color,k=2)) Si queremos que uno de los elementos tenga mayor probabilidad de salir elegido, aplicamos una matriz «peso». En este ejemplo, pedimos que saque 10 combinaciones de 3 colores, y que el color azul, sea 5 veces más probable que el resto: for _ in range(10): print('Combinación de 3 colores al azar=>',random.choices(color,weights=[1,1,1,5,1,1],k=3)) Función shuffle() Con la función Shuffle, “barajas” o cambiar de posición aleatoriamente los elementos de una lista cualquiera. # "Barajamos" con shuffle una lista de números lista = [5, 3, 45, 27, 2, 10, 82] # La lista tal cual print('Lista original=>',lista) random.shuffle(lista) # La lista mezclada print('Lista mezclada=>',lista) Función gauss() La función gauss() usa como argumentos la media y la desviación estándar, para generar valores aleatorios que sigan una distribución normal. En este ejemplo, generamos un conjunto de números (pseudo)-aleatorios que siguen una distribución gaussiana, con media 0 y desviación estándar 1. for _ in range(10): print((random.gauss(0,1))) Si queremos ver la gráfica, para, por ejemplo, 1000 valores, import random import matplotlib.pyplot as plt %matplotlib inline campana=[random.gauss(1,0.5) for i in range(1000)] plt.hist(campana, bins=15) plt.show() Si quiere probar a implementar tu propio generador de números aleatorios lo más “verdadero” posible una Raspberry Pi, no te pierdas este otro post. Para mantenerte al día con LUCA visita nuestra página web, suscríbete a LUCA Data Speaks o síguenos en Twitter, LinkedIn y YouTube. Hybrid Cloud vs nube pública: ¿cuál es mejor?Tu primer proyecto IoT Cloud (I): Tutorial para solución E2E con ESP32 y AWS IoT
Roberto García Esteban ChatGPT y Cloud Computing: un matrimonio bien avenido ChatGPT (quizá no sepas que son las siglas de Chat Generative Pre-Trained Transformer) está en boca de todos por su impresionante habilidad para generar textos que parecen escritos por...
Olivia Brookhouse ¿Puede la Inteligencia Artificial entender las emociones? Cuando John McCarthy y Marvin Minsky iniciaron la Inteligencia Artificial en 1956, se sorprendieron de cómo una máquina podía resolver rompecabezas increíblemente difíciles en menos tiempo que los humanos. Sin...
Javier Martínez Borreguero Automatización, Conectividad e Inteligencia Aumentada al servicio de una reindustrialización competitiva, disruptiva y sostenible Por segundo año consecutivo vuelvo a participar en el Advanced Factories (AF 2023), la mayor exposición y congreso profesional dedicado a la Industria 4.0 del sur de Europa. Un...
Nacho Palou Medidas para reducir la brecha digital de género sin esperar 32 años El informe Sociedad Digital en España 2023, de Fundación Telefónica, dedica un apartado específico para analizar la brecha de género en el ámbito del talento digital. Destaca que, si bien...
Nacho Palou Raspberry Pi para Edge AI: Inteligencia Artificial en el borde para todos Raspberry Pi es un popular ordenador muy utilizado entre desarrolladores, estudiantes y aficionados a la informática, a la robótica y a ‘cacharrear’. Entre sus virtudes están su bajo coste...
Carlos Lorenzo Ya no eres solo una empresa de productos o servicios, eres una empresa de datos Todas las empresas que operan en la actualidad son en realidad empresas de datos. Y lo son porque día a día almacenan y utilizan una gran cantidad de información:...