[pyar] Probabilidad con Python
Francisco Palm
francisco.palm en gmail.com
Sab Sep 10 19:54:50 ART 2011
Esto entra dentro de lo que se denominan "técnicas de monte carlo". En
particular, estás trabajando con una distribución de probabilidades
discreta, en la que se asigna una "probabilidad" a cada opción
posible.
Si tienes subgrupos estás tratando con una distribución condicional,
si estoy entendiendo bien.
En las técnicas de monte carlo, tal cómo has asomado requieres números
pseudoaleatorios, esto se genera con el módulo random de la librería
estándar.
Si tienes una serie de ítems con sus probabilidades, digamos A: 0.3,
B: 0.2, C: 0.1, D: 0.2, E: 0.15, F: 0.05
La técnicas de monte carlo sugieren la construcción de una
distribución de probabilidades acumulada, digamos:
A: 0.3, B: 0.5, C: 0.6, D: 0.8, E: 0.95, F: 1.00
De este modo, si generas un número pseudoaletorio en el rango [0,1) si
toma un valor entre 0 y menor que 0.3 se selecciona el valor A, entre
0.3 y menor que 0.5 tomará B y así sucesivamente.
Si tienes subgrupos, se maneja como probabilidades condicionales.
Supongamos que tienes dos subgrupos X formado por A, B y E, y Y
formado por C, D y F
Entonces la distribución acumulada sería X: 0.65, Y: 1.00
Así utilizas un número pseudoaleatorio para seleccionar entre los
subgrupos X o Y. Si selecciona Y por ejemplo, entonces trabajaría con
la distribución condicional acumulada dentro de ese grupo, digamos:
C: 0.1/0.35, D: 0.3/0.35, E: 0.35/0.35 Se divide entre 0.35 la suma de
las probabilidades de C, D, E ya que la pertenencia al subgrupo Y es
un evento seguro, es decir la probabilidad de seleccionar C, D o E
dado que el ítem seleccionado está en el subgrupo Y
Para seleccionarlo debe tomarse un segundo valor pseudoaleatorio.
Los números pseudoaleatorios se generan mediante la función random del
módulo random:
>>> import random
>>> random.random()
0.8547769623183441
>>> random.random()
0.8295767728955186
>>> random.random()
0.5167609622991813
>>> random.random()
0.17336314047282153
Saludos
F. Palm
2011/9/10 Gonzalo <gonchi.sanchez en gmail.com>:
> Hola gente, mi consulta es muy simple, quisiera que me ayuden en un
> tema de probabilidades (no estoy seguro si lo estoy buscando bien en
> internet).
> Yo tengo un set de items, y cada uno con un "peso" o "probabilidad de
> ser elegido". Básicamente lo que yo necesitaría es dividir este set de
> items en n subgrupos, donde cada grupo tiene un "peso total"
> equilibrado (no exactamente igual, sino dentro de unos limites). Pero
> ademas que cada vez que corra este programa, los subgrupos resultados
> sean distintos (pseudo-aleatoriamente)...
> No se si me explico...
> No pido que me tiren la solución en código, sino que me ayuden a
> pensar la lógica de esto o alguna librería para ver.
> slds, y gracias!
>
> --
> Gonzalo.
> #534331
> #91296338
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de Argentina - http://www.usla.org.ar
>
--
--------------------------------------
fpalm en mapologo.org.ve
francisco.palm en gmail.com
cel: +58 +424 4228252
tel: +58 +274 6352001
----
Debemos ser libres, no para hacer lo que nos plazca, sino libres para
comprender muy profundamente nuestros propios instintos e impulsos. K
More information about the pyar
mailing list