Nella sezione precedente vi ho illustrato
attraverso un intero set di derivazioni
matematiche pensate per un modello
di massima entropia di
essenzialmente un problema giocattolo,
il problema giocattolo è come possiamo modellare
la distribuzione dei tempi di arrivo di
taxi di New York sulla base di un piccolo
insieme di dati, e questo è un problema
bene potrebbe essere di interesse a te personalmente,
ma non è certo di profondo interesse scientifico.
In questa sezione successiva, cosa
farò è presentarvi un ragionevole
interessante problema scientifico e mostrare
come può l'approccio della massima entropia
illuminare alcune caratteristiche interessanti
di quel sistema.
Il sistema particolare che abbiamo in mente è
quello che la gente tende a chiamare
ecosistema open-source. È una grande
comunità di persone dedite alla scrittura
di codice in modo che sia aperto,
accessibile e inspezionabile,
e in generale
prodotto non da un individuo,
e non da un'azienda, con
tutele del copyright e controllo sul
codice, ma piuttosto da una comunità di
persone che condividono e modificano codice reciproco.
L'ecosistema open-source è
qualcosa che domina una gran parte
dei programmi eseguiti per noi oggi,
incluso non solo Mac OS X, ma ovviamente
Linux. È una grande storia di successo e noi
vorremmo studiarlo scientificamente.
Ho usato la parola ecosistema in modo attento
in parte perché molto di quello che sto andando
a dire ora è un insieme di strumenti e
derivazioni che ho imparato da John Harte
e persone che hanno lavorato con John
Harte sull'approccio della massima entropia
non ai sistemi sociali, ma ai sistemi
biologici e in particolare ecosistemi.
Il libro di John Harte "Maximum Entropy
and Ecology "- te lo consiglio come una
fonte di molte più informazioni su
tipi di strumenti che sto per mostrare
ora. Il mio obiettivo qui è davvero quello di mostrare
che anche semplici argomenti basati su
la massima entropia possono fornirne davvero
profonda conoscenza scientifica.
Quello che sto per prendere
come mia fonte di dati, perché sto
andando a studiare il mondo empirico ora,
è tratto da Sourceforge. Sourceforge
non è più il repository più popolare
di software open-source - forse Github
lo ha ora eclissato, ma per molto tempo,
forse dal 1999, e troviamo
dati fino al 2011 su questo, ha un
enorme archivio di progetti che spaziano
da diversi tipi di giochi per computer a
editor di testo per affari e software
matematici, parte del codice che ho usato
nella mia ricerca è messo su Sourceforge.
È un ottimo posto in cui studiare
in particolare l'uso di linguaggi informatici.
Quello che ho tracciato qui é la
distribuzione dei linguaggi usati dalla
comunità open-source e trovato su Sourceforge.
Sull'asse delle "x" c'è il logaritmo del
numero di progetti scritti in un particolare
linguaggio. Puoi vedere quel log zero, quello
è uno. Nel database ci sono circa
dodici linguaggi che hanno solo circa
un progetto. Questi linguaggi sono
estremamente rari, in altre parole, nel
movimento open-source. Al contrario,
all'altra estremità di questa scala
logaritmica qui a quattro, quindi, dieci alla quattro
sono diecimila, vediamo che c'è un
piccolo numero di linguaggi estremamente
popolari, questi sono più o meno
linguaggi comuni che troverai su Sourceforge
hanno una popolarità fuori controllo, ok?
E se sai qualcosa di programmazione
non ti sorprenderà
che queste sono principalmente linguaggi
derivati da C, come C, C++, Java, ok?
Da qualche parte nel mezzo tra questi
uccelli estremamente rari e questi incredibilmente
comuni, sai, perché questi sono comuni,
come i batteri del movimento
open-source, da qualche parte nel mezzo che hai
un numero maggiore di linguaggi moderatamente
popolari, ok? Quindi questa distribuzione
dei linguaggi è quello che cercheremo di
spiegare usando il metodo della massima entropia, ok?
C'è un piccolo numero di linguaggi rari
uno più grande di quelli moderatamente popolari
e poi di nuovo un numero molto piccolo di
linguaggi molto popolari, ok?
Quindi ho tracciato questa come una distribuzione
di probabilità, infatti, P(n) dove n
qui è il numero di progetti nella
comunità open-source che usano il tuo linguaggio,
e questa è la probabilità che il tuo
linguaggio abbia n progetti nella comunità
open-source, quello che vorremmo fare è
costruire un modello di massima entropia di questa
distribuzione qui, ho rappresentato gli stessi
dati in un modo leggermente diverso, questo è
come le persone tendono a rappresentarlo, questo è una
classifica di abbondanza,
quello che gli ecologisti chiamano distribuzione di
abbondanza di specie. Quindi il linguaggio di primo livello,
il primo posto, qui, è il linguaggio con il
maggior numero di progetti, e non
sorprenderà i giovani che in realtà
questo si é rivelato essere Java, ci sono
20 mila progetti scritti in Java,
puoi vedere il secondo linguaggio C++,
poi C, poi PHP e questo raro
i linguaggi quaggiù hanno livelli molto più bassi,
quindi numeri più alti significano ranghi più bassi, come
al 3° posto, al 4° posto, quindi un 100° posto
proprio qui al centesimo posto c'è un
linguaggio molto sfortunato chiamato Turing,
che ha solo - per quanto ne so - in
archivio sono scritti solo due progetti
Turing, e puoi vedere alcuni dei miei
linguaggi preferiti come Ruby sono da qualche parte
qui in questa zona di moderata popolarità.
Quindi rappresentiamo quei dati, sono gli
stessi dati, ora quello che ho appena tracciato qui è
log abbondanza su questo asse ed qui il
rango del linguaggio ma è lineare, al contrario
di qui, dove vi ho mostrato il logaritmo, ok?
Questo è un grafico log-log, questo è ora un
grafico log-lineare, quindi questi sono i dati effettivi.
Quindi, la prima cosa che proveremo
è una distribuzione
con massima entropia per
l'abbondanza del linguaggio, in altre parole, per il
probabilità di trovare un linguaggio con "n"
progetti, e quello che faremo è
vincoleremo solo una cosa,
la popolarità media di un linguaggio,
questo sarà il nostro unico vincolo per
il problema della massima entropia, e
sceglieremo la distribuzione di probabilità
"p" di "n" che massimizza l'entropia "p log p"
somma negativa e da zero a infinito di
"p log p", dove massimizzare questa
quantità soggetta a questo vincolo e
ovviamente, sempre soggetto a
vincolo di normalizzazione, che "p(n)" è
uguale all'unità, ok? Quindi questo è il mio altro
vincolo e, naturalmente, sappiamo come farlo
fare già questo problema, conosciamo la
forma funzionale, è esattamente lo stesso
problema come quello che avete imparato a fare quando
avete modellato il tempo di attesa per un taxi
di New York, ok? Avete modellato
quel problema esattamente allo stesso modo, quindi io
vincolerò solo la media del
tempo di attesa, qui stiamo solo andando a
limitare la popolarità media di un
linguaggio, popolarità significa il numero di
progetti scritti in quel linguaggio che sono
nell'archivio, quindi sappiamo cosa è
la forma funzionale apparirà, sembra
come qualcosa come "e" alla meno
"lambda n", ok? tutto su "Z", e poi non
resta che trovare lambda e Z, ok? Così
che riproduciamo la giusta abbondanza
che vediamo nei dati, quindi questa è la
distribuzione di massima entropia, è anche,
ovviamente, un modello esponenziale, ha una
forma esponenziale, e se effettivamente trova
lambda e Z che riproducono al meglio i dati,
in altre parole, quello che meglio soddisfa questo
vincolo, e sono altrimenti massima entropia,
ecco cosa troviamo, ok?
Questa banda rossa qui è il sigma 1 e 2
contorni per la distribuzione di abbondanza
e tutto quello che voglio che vediate
questo grafico è un adattamento incredibilmente cattivo di questo.
La massima distribuzione dell'entropia
con questo vincolo,
non riproduce i dati,
non è in grado di spiegare,
la nostra modellazione, i dati in qualsiasi ragionevole
modo, radicalmente sottostima
questi linguaggi estremamente popolari,
non è in grado, in altre parole, di riprodursi
il fatto che ci siano linguaggi come
C e Python, che sono estremamente popolari,
predice fin troppo questo regime
mesoscopico, predice i linguaggi moderatamente
popolari, giusto, come fa anche
sovrastima quelli davvero rari
uccelli, quei linguaggi di rango veramente basso,
con pochissimi esempi nell'archivio,
quindi questo è giusto, questo è il fallimento della scienza.