项目作者: ciodar

项目描述 :
Project for AI course final exam inspired on PyBN
高级语言: Python
项目地址: git://github.com/ciodar/BN_BayesianEstimate.git
创建时间: 2020-01-22T14:42:19Z
项目社区:https://github.com/ciodar/BN_BayesianEstimate

开源协议:

下载


BELearningParameters

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.

Creazione della rete

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.

  • V: contiene la lista dei nodi della rete.
  • E: dizionario avente come chiave ognuno dei nodi e come valore un’array con la lista dei figli.
  • F: dizionario avente come chiave ognuno dei nodi e come valore un dizionario, contenente
    • values: un array indicante il dominio
    • parents: un array indicante i padri
    • cpt: un array monodimensionale indicante la CPT del nodo
    • alphas: un array contenente gli pseudocounts di ogni valore del nodo.

Apprendimento

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:

  1. Per ogni nodo vengono riportati gli pseudocounts se diversi da zero, altrimenti viene supposta una distribuzione uniforme sull’intera cpt.
  2. Il dataset in input viene analizzato aggiornando gli pseudocounts e la cpt

Misura della qualità della soluzione

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.

Esempio

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.

  1. from BayesianNetwork import BayesianNet
  2. from KLDivergenceCalculation import calculateKLDivergency
  3. from BayesianEstimate import bayesEstimate
  4. #Bayesian Network reading
  5. bn = BayesianNet()
  6. bn.readNetwork("resources/cancer3uniform.bn")
  7. #Learning
  8. csvfile10 = 'resources/datasets/10Cases.csv'
  9. bayesEstimate(csvfile10, bn)
  10. #Kullack-Leibler divergency
  11. print('KL divergence for n = 10', calculateKLDivergency(bn))