No, non è un gioco di parole e, ammetto, ho riso davvero per tanto tempo prima di capire il motivo che ha spinto la Microsoft a scegliere un nome così infelice per la sua nuova libreria.
Si perché Infer.Net è l’ennesimo parto dell’area Research della Microsoft (per intenderci quelli che hanno creato F#, C-Omega e altri progetti simpatici). Scopo di questa libreria è quello di fornire tutti gli strumenti tipici del calcolo probabilistico e della creazione di algoritmi che su di essi basano i loro risultati.

Nel video introduttivo, e nella relativa documentazione, è possibile assistere ad algoritmi che imparano a classificare le immagini in base ai nostri input (i famosi filtri Bayesiani) in modo semplice e utilizzando un insieme di classi che ci consentono di passare facilmente dal modello probabilistico al codice.
In pratica, scopo della libreria (disponibile in download come beta), è quello di consentire la creazione di algoritmi di inferenza Bayesiana fornendo una serie di classi già pronte allo scopo.
Un primo semplice (e forse banale esempio) è il seguente: supponiamo di avere due monete e di voler valutare la probabilità che lanciando in aria entrambe, cadendo, mostrino testa
VariablefirstCoin = Variable.Bernoulli(0.5); Variable secondCoin = Variable.Bernoulli(0.5); Variable bothHeads = firstCoin & secondCoin; InferenceEngine ie = new InferenceEngine(); Console.WriteLine("Probability both coins are heads: "+ ie.Infer(bothHeads));
Il risultato è (ovviamente):
Probability both coins are heads: Bernoulli(0.25)
Possiamo però utilizzare l’inference engine per osservare una variabile e decidere la probabilità di un evento. Supponiamo che la variabile (bothHeads) che indica che entrambe le monete sono cadute come testa sia falsa e vogliamo calcolare la probabilità che la prima moneta sia testa; useremo il seguente codice:
bothHeads.ObservedValue=false;
Console.WriteLine("Probability distribution over firstCoin: " +
ie.Infer(firstCoin));
il risultato sarà:
Probability distribution over firstCoin: Bernoulli(0.3333)
a cui possiamo facilmente arrivare notando che se la variabile bothHeads è false ciò implica una delle possibili condizioni sulle due monete: (testa, croce) (croce, testa) (croce, croce). Quindi la probabilità che la prima moneta sia testa è 1/3.
Buone inferenze!
Zac





