# Learning essential graphs¶

In [1]:

%matplotlib inline
from pylab import *
import matplotlib.pyplot as plt

import os

import pyAgrum as gum
import pyAgrum.lib.notebook as gnb


## Compare learning algorithms¶

Essentially MIIC and 3off2 computes the essential graph (CPDAG) from data. Essential graphs are mixed graphs.

In [2]:

learner=gum.BNLearner("out/sample_asia.csv")
learner.use3off2()
learner.useNMLCorrection()
print(learner)
ge3off2=learner.learnEssentialGraph()

Filename       : out/sample_asia.csv
Size           : (500000,8)
Variables      : tuberculosis[2], smoking[2], tuberculos_or_cancer[2], visit_to_Asia[2], positive_XraY[2], bronchitis[2], lung_cancer[2], dyspnoea[2]
Induced types  : True
Missing values : False
Algorithm      : 3off2
Correction     : NML
Prior          : -


In [3]:

gnb.showDot(ge3off2.toDot());

In [4]:

learner=gum.BNLearner("out/sample_asia.csv")
learner.useMIIC()
learner.useNMLCorrection()
print(learner)
gemiic=learner.learnEssentialGraph()
gemiic

Filename       : out/sample_asia.csv
Size           : (500000,8)
Variables      : tuberculosis[2], smoking[2], tuberculos_or_cancer[2], visit_to_Asia[2], positive_XraY[2], bronchitis[2], lung_cancer[2], dyspnoea[2]
Induced types  : True
Missing values : False
Algorithm      : MIIC
Correction     : NML
Prior          : -


Out[4]:


For the others methods, it is possible to obtain the essential graph from the learned BN.

In [5]:

learner=gum.BNLearner("out/sample_asia.csv")
learner.useGreedyHillClimbing()
bnHC=learner.learnBN()
print(learner)
geHC=gum.EssentialGraph(bnHC)
geHC
gnb.sideBySide(bnHC,geHC)

Filename       : out/sample_asia.csv
Size           : (500000,8)
Variables      : tuberculosis[2], smoking[2], tuberculos_or_cancer[2], visit_to_Asia[2], positive_XraY[2], bronchitis[2], lung_cancer[2], dyspnoea[2]
Induced types  : True
Missing values : False
Algorithm      : Greedy Hill Climbing
Score          : BDeu
Prior          : -


 G tuberculos_or_cancer tuberculos_or_cancer dyspnoea dyspnoea tuberculos_or_cancer->dyspnoea positive_XraY positive_XraY tuberculos_or_cancer->positive_XraY bronchitis bronchitis tuberculos_or_cancer->bronchitis dyspnoea->bronchitis smoking smoking bronchitis->smoking tuberculosis tuberculosis tuberculosis->tuberculos_or_cancer tuberculosis->dyspnoea visit_to_Asia visit_to_Asia tuberculosis->visit_to_Asia lung_cancer lung_cancer lung_cancer->tuberculos_or_cancer lung_cancer->smoking lung_cancer->bronchitis no_name 0 tuberculosis 2 tuberculos_or_cancer 0->2 3 visit_to_Asia 0->3 7 dyspnoea 0->7 1 smoking 4 positive_XraY 2->4 5 bronchitis 2->5 2->7 5->1 6 lung_cancer 6->1 6->2 6->5 7->5
In [6]:

learner=gum.BNLearner("out/sample_asia.csv")
learner.useLocalSearchWithTabuList()
print(learner)
bnTL=learner.learnBN()
geTL=gum.EssentialGraph(bnTL)
geTL
gnb.sideBySide(bnTL,geTL)

Filename       : out/sample_asia.csv
Size           : (500000,8)
Variables      : tuberculosis[2], smoking[2], tuberculos_or_cancer[2], visit_to_Asia[2], positive_XraY[2], bronchitis[2], lung_cancer[2], dyspnoea[2]
Induced types  : True
Missing values : False
Algorithm      : Local Search with Tabu List
Tabu list size : 2
Score          : BDeu
Prior          : -


 G tuberculos_or_cancer tuberculos_or_cancer dyspnoea dyspnoea tuberculos_or_cancer->dyspnoea positive_XraY positive_XraY smoking smoking smoking->dyspnoea bronchitis bronchitis smoking->bronchitis bronchitis->dyspnoea tuberculosis tuberculosis tuberculosis->tuberculos_or_cancer tuberculosis->positive_XraY visit_to_Asia visit_to_Asia tuberculosis->visit_to_Asia lung_cancer lung_cancer lung_cancer->tuberculos_or_cancer lung_cancer->positive_XraY lung_cancer->smoking no_name 0 tuberculosis 2 tuberculos_or_cancer 0->2 3 visit_to_Asia 0->3 4 positive_XraY 0->4 1 smoking 5 bronchitis 1->5 6 lung_cancer 1->6 7 dyspnoea 1->7 2->7 5->7 6->2 6->4

Hence we can compare the 4 algorithms.

In [7]:

(
gnb.flow.clear()
.display()
)


Essential graph from 3off2

Essential graph from miic

BayesNet from GHC

Essential graph from GHC

BayesNet from TabuList

Essential graph from TabuList
In [ ]: