Project for AI course final exam inspired on PyBN
Questo progetto implementa l’apprendimento di parametri attraverso l’approccio bayesiano di una rete Bayesiana con struttura e distribuzione di probabilità nota, quindi misura la distanza tra la distribuzione trovata e la distribuzione nota.
La rete è inserita attraverso il metodo readNetwork della classe BayesianNetwork, che prende in input il percorso del file da utilizzare e crea una rete Bayesiana da esso.
In resources/datasets sono contenuti due esempi che rappresentano la rete Bayesiana cancer_neapolitan contenuta negli esempi di Hugin Lite.
L’apprendimento è effettuato attraverso la funzione bayes_estimator che prende in ingresso un oggetto BayesianNetwork
e il percorso di un file csv ed effettua l’apprendimento dei parametri.
Un esempio di file csv è contenuto in resources/datasets/Example.csv
L’apprendimento è effettuato nel seguente modo:
La distanza tra la distribuzione appresa e la distribuzione p nota viene calcolata attraverso la funzione calculateDivergency, che prende in input un oggetto BayesianNetwork e restituisce la divergenza tra le due.
Di seguito un esempio di lettura della rete,apprendimento e calcolo della divergenza.
La classe Tester.py presenta in maniera più estesa il codice utilizzato per la generazione dei risultati descritti nella relazione.
from BayesianNetwork import BayesianNet
from KLDivergenceCalculation import calculateKLDivergency
from BayesianEstimate import bayesEstimate
#Bayesian Network reading
bn = BayesianNet()
bn.readNetwork("resources/cancer3uniform.bn")
#Learning
csvfile10 = 'resources/datasets/10Cases.csv'
bayesEstimate(csvfile10, bn)
#Kullack-Leibler divergency
print('KL divergence for n = 10', calculateKLDivergency(bn))