En la sección anterior lo guíe
por un conjunto de derivaciones
matemáticas diseñadas para producir
la máxima entropía de
un problema de juguete,
el problema de juguete es, como podemos
modelar la distribución de tiempos de
llegada de taxis en Nueva York, basados en
un pequeño grupo de datos, y ese es un
problema que puede ser de su interés personal
pero ciertamente no es un problema de profundo interés científico.
En esta sección, lo que
voy a hacer es presentarle un problema
razonablemente interesante y mostrarle
como el enfoque de la máxima entropía
puede aclarar algunas propiedades interesantes
de ese sistema.
En particular, el sistema que tengo en mente es
el que la gente tiende a llamar el ecosistema
de código abierto. Es la gran comunidad de
gente que escribe código para que sea
abierto, accesible, y depurable,
y en general
producido no por un individuo,
ni por una corporación,
con derechos de autor y control sobre el código,
sino por una comunidad de gente
compartiendo y editando código entre si
El ecosistema de código abierto
domina una gran fracción del código de
código de computadora que usado por nosotros hoy,
incluyendo no solo Mac OS X, claro, Linux.
Es una gran historia de triunfo y
nos gustaría estudiarla científicamente.
Use la palabra ecosistema
en parte, porque mucho de lo que voy a
decirle es un conjunto de herramientas y
derivaciones que aprendi de John Harte
y de la gente que trabaja con John Harte
en el enfoque de máxima entropía a…
no sistemas sociales, si no, a sistemas biológicos,
y en particular a ecosistemas.
El libro de John Harte "Máxima entropía y ecología"
Se lo recomiendo como
una fuente de información en este tipo
de herramientas que voy a mostrarle ahora.
Mi objetivo es mostrarle
que inclusive argumentos simples basados
en máxima entropía pueden proveer
conocimiento científico muy profundo.
Lo que voy a usar
como mi fuente de datos, porque ahora
voy a estudiar el mundo empírico,
es la pagina SourceForge.
SourceForge ya no es el mayor repositorio
de software abierto, quizás Github
lo eclipso, pero por un largo periodo de tiempo
tal vez desde 1999, y recopilamos datos
hasta 2011 sobre esto, tiene un enorme
archivo de proyectos que van desde
diferentes tipos de juegos de computadora
hasta editores de texto, a software de
negocios y matemático, parte del código
que he usado en mi propia investigación esta en SourceForge.
Es un gran ligar para estudiar, en particular,
el uso de lenguajes computadora.
Aquí, lo que he graficado es la
distribución de lenguajes usados en la comunidad
de código abierto y encontrados en SourceForge.
En el eje x tenemos el logaritmo del numero
de proyectos escritos en un lenguaje en particular
Puede ver que el logaritmo de cero es uno.
En la base de datos hay alrededor de doce
lenguajes que están en el orden de un solo proyecto
Estos lenguajes son extremadamente raros,
en otras palabras, en el movimiento de
código abierto. Contrariamente
en el otro extremo de esta escala
logarítmica, aquí, en el cuatro, diez a la cuatro es diez mil,
vemos que hay un pequeño numero de
lenguajes extremadamente populares,
estos son los lenguajes mas populares que
encontrara en SourceForge,
Tienen una popularidad desmesurada, ok?
Y si sabe algo acerca de programación de
computadoras no le sorprenderá saber que
estos lenguajes son mayoritariamente
derivados de C, como C, C++, Java, ok?
En el medio entre estos extremadamente poco comunes,
y estos increíblemente comunes
que son mas o menos como las bacterias
del movimiento de código abierto
por aquí, en el medio tiene un gran numero
de lenguajes moderadamente populares, ok?
Así, esta distribución de lenguajes
es lo que vamos a tratar de explicar
usando métodos de máxima entropía, ok?
Hay un pequeño numero de lenguajes poco comunes,
un gran numero de lenguajes moderadamente populares,
y un numero muy pequeño de
lenguajes extremadamente populares, ok?
Entonces, grafiqué eso como una distribución
de probabilidad, de hecho, P de n donde n
es el numero de proyectos en la comunidad
de código abierto que usan ese lenguaje,
y esta el la probabilidad de que su lenguaje
tenga n proyectos en la comunidad de
código abierto, lo que nos gustaría hacer
construir un modelo de máxima entropía de
esta distribución de aquí, yo represente
los mismo datos de una manera un poco diferente,
así es como la gente tiende a representarlos
esta es la distribución del ranking de abundancia
lo que los ecologistas llaman
una distribución de abundancia de especies,
Así, el lenguaje en el tope, aquí, es el
lenguaje con el mayor numero de proyectos,
y no va a sorprenderlo saber que
resulta ser Java, hay veinte mil proyectos
escritos en Java, el segundo en el ranking
como puede ver es C++,
luego C, luego PHP, y estos lenguajes raros
tienen un ranking mas bajo,
así, que números altos significan rangos bajos,
como en 3er lugar, 4to lugar, entonces,
el 100mo es el puesto esta el desafortunado
lenguaje llamado Turing,
que hasta donde se, solo hay dos proyectos
escritos en Turing en el archivo,
y puede ver algunos de mis lenguajes favoritos
como Ruby, están por aquí, en esta zona
de moderada popularidad.
Entonces representamos esos datos,
son los mismos datos, lo que acabo de
graficar es el logaritmo de la abundancia
en este eje, y aquí esta el ranking lineal
en cambio aquí, donde le mostré el logaritmo, ok?
esta es una gráfica log-log, esta es
conocida como una gráfica log-lineal,
así que estos son los datos reales. Así que la primera cosa que intentare
es…
Una distribución de máxima entropía de
abundancia de lenguajes, en otras palabras,
a la probabilidad de encontrar un lenguaje
con n proyectos, y lo que vamos a hacer es
vamos a restringir solo una cosa,
la popularidad promedio de un lenguaje
esta va a ser nuestra restriccion para el
problema de máxima entropía, y vamos
a elegir la distribución de probabilidad, p de n
que maximiza la entropía, suma negativa p log p
y de cero a infinito, de p log p,
vamos a tratar de maximizar estas cantidades
sujetas a esta restricción, y claro,
siempre sujeta a la restricción de normalización,
que p(n) es igual a la unidad, ok?
Entonces esa es mi otra restricción,
y claro, ya sabemos como resolver
este problema, conocemos la forma funcional,
es exactamente el mismo problema
que el que aprendió a resolver cuando
modelo el tiempo de espera de un taxi
en Nueva York, ok? Usted modelo
ese problema exactamente de la misma manera,
Así que, solo voy a restringir el promedio
del tiempo de espera, aquí solo voy a
restringir el promedio de la popularidad
de un lenguaje, popularidad significa el
numero de proyectos escritos en ese lenguaje
en el archivo, y así, sabemos que la forma
funcional se vera como, se ve como
algo como e a la menos lambda n, ok?
todo sobre Z, y luego todo lo que tenemos
que hacer es ajustar lambda y Z, ok?
Tal que reproduzca la abundancia correcta,
como la vemos en los datos, así que esta
es la distribución de máxima entropía,
es también, claro, un modelo exponencial,
tiene una forma exponencial, y si realmente
encontramos el valor de lambda y Z que
reproducen mejor los datos,
en otras palabras,
que mejor satisfacen esta restricción, y satisfacen la máxima entropía,
esto es lo que encontramos, ok?
Esta banda roja de aquí son los contornos
sigmas uno y dos del ranking
de la distribución de abundancia, y lo que quiero que vea en
esta gráfica es que se ajusta a los datos un increíblemente mal.
La distribución de máxima entropía
con esta restricción
no reproduce los datos,
no es capas de explicar…
nuestro modelado, los datos de ninguna
manera razonable, sub predice
estos lenguajes extremadamente populares,
es incapaz, en otras palabras, de reproducir el hecho
de que hayan lenguajes como C y Python,
que son extremadamente populares,
sobre predice esta especie de régimen
mesoscopico, sobre predice los lenguajes
moderadamente populares, igual que
sobre predice estos lenguajes poco comunes,
esos lenguajes de rangos muy bajos,
con muy pocos ejemplos en el archivo,
entonces esto esta bien,
esto es un fallo científico