Skip to content

Learning BN as probabilistic classifier

Learning a Bayesian network can be used to obtain a classifier for one of the nodes of the model. For more about classifier, see pyagrum.skbn.

Creative Commons LicenseaGrUMinteractive online version
import pyagrum as gum
import pyagrum.lib.notebook as gnb
from pyagrum.lib.bn2roc import showROC, showPR, showROC_PR
SIZE_LEARN = 10000
SIZE_VALID = 2000
bn = gum.loadBN("res/alarm.bgum")
bn
G HRSAT HRSAT LVFAILURE LVFAILURE LVEDVOLUME LVEDVOLUME LVFAILURE->LVEDVOLUME HISTORY HISTORY LVFAILURE->HISTORY STROKEVOLUME STROKEVOLUME LVFAILURE->STROKEVOLUME FIO2 FIO2 PVSAT PVSAT FIO2->PVSAT ERRLOWOUTPUT ERRLOWOUTPUT HRBP HRBP ERRLOWOUTPUT->HRBP PRESS PRESS INSUFFANESTH INSUFFANESTH CATECHOL CATECHOL INSUFFANESTH->CATECHOL CVP CVP MINVOLSET MINVOLSET VENTMACH VENTMACH MINVOLSET->VENTMACH PULMEMBOLUS PULMEMBOLUS SHUNT SHUNT PULMEMBOLUS->SHUNT PAP PAP PULMEMBOLUS->PAP LVEDVOLUME->CVP PCWP PCWP LVEDVOLUME->PCWP ANAPHYLAXIS ANAPHYLAXIS TPR TPR ANAPHYLAXIS->TPR KINKEDTUBE KINKEDTUBE KINKEDTUBE->PRESS VENTLUNG VENTLUNG KINKEDTUBE->VENTLUNG SAO2 SAO2 PVSAT->SAO2 EXPCO2 EXPCO2 VENTTUBE VENTTUBE VENTTUBE->PRESS VENTTUBE->VENTLUNG DISCONNECT DISCONNECT DISCONNECT->VENTTUBE SHUNT->SAO2 HYPOVOLEMIA HYPOVOLEMIA HYPOVOLEMIA->LVEDVOLUME HYPOVOLEMIA->STROKEVOLUME CO CO STROKEVOLUME->CO HR HR HR->HRSAT HR->HRBP HR->CO HREKG HREKG HR->HREKG VENTALV VENTALV VENTALV->PVSAT ARTCO2 ARTCO2 VENTALV->ARTCO2 MINVOL MINVOL INTUBATION INTUBATION INTUBATION->PRESS INTUBATION->SHUNT INTUBATION->VENTALV INTUBATION->MINVOL INTUBATION->VENTLUNG TPR->CATECHOL BP BP TPR->BP VENTLUNG->EXPCO2 VENTLUNG->VENTALV VENTLUNG->MINVOL CATECHOL->HR ERRCAUTER ERRCAUTER ERRCAUTER->HRSAT ERRCAUTER->HREKG ARTCO2->EXPCO2 ARTCO2->CATECHOL VENTMACH->VENTTUBE CO->BP SAO2->CATECHOL
gum.generateSample(bn, SIZE_LEARN, "out/learn.csv", show_progress=True, with_labels=True)
gum.generateSample(bn, SIZE_VALID, "out/train.csv", show_progress=True, with_labels=True)

out/learn.csv: 0%| |

out/learn.csv: 100%|███████████████████████████████████████|

Log2-Likelihood : -151385.80889310464

out/train.csv: 0%| |

out/train.csv: 100%|███████████████████████████████████████|

Log2-Likelihood : -30052.752731579396
-30052.752731579396
## Learning a BN from the database
learner = gum.BNLearner("out/train.csv")
bn2 = learner.useMIIC().learnBN()
currentTime = learner.currentTime()
gnb.flow.add(gnb.getBN(bn2, size="9"), f"Learned with {SIZE_LEARN} lines in {currentTime:.3f}s")
gnb.flow.display()
G HRSAT HRSAT HREKG HREKG HRSAT->HREKG LVFAILURE LVFAILURE LVEDVOLUME LVEDVOLUME LVFAILURE->LVEDVOLUME STROKEVOLUME STROKEVOLUME LVFAILURE->STROKEVOLUME FIO2 FIO2 PVSAT PVSAT FIO2->PVSAT ERRLOWOUTPUT ERRLOWOUTPUT HRBP HRBP ERRLOWOUTPUT->HRBP PRESS PRESS CVP CVP INSUFFANESTH INSUFFANESTH PULMEMBOLUS PULMEMBOLUS SHUNT SHUNT PULMEMBOLUS->SHUNT MINVOLSET MINVOLSET VENTMACH VENTMACH MINVOLSET->VENTMACH LVEDVOLUME->CVP PCWP PCWP LVEDVOLUME->PCWP ANAPHYLAXIS ANAPHYLAXIS TPR TPR ANAPHYLAXIS->TPR KINKEDTUBE KINKEDTUBE KINKEDTUBE->PRESS VENTLUNG VENTLUNG KINKEDTUBE->VENTLUNG HISTORY HISTORY HISTORY->LVFAILURE SAO2 SAO2 PVSAT->SAO2 EXPCO2 EXPCO2 VENTTUBE VENTTUBE VENTTUBE->PRESS VENTTUBE->VENTLUNG DISCONNECT DISCONNECT DISCONNECT->VENTTUBE SHUNT->SAO2 HYPOVOLEMIA HYPOVOLEMIA HYPOVOLEMIA->LVEDVOLUME HYPOVOLEMIA->STROKEVOLUME CO CO STROKEVOLUME->CO HR HR HR->HRSAT HR->HRBP HR->CO HR->HREKG VENTALV VENTALV VENTALV->PVSAT MINVOL MINVOL VENTALV->MINVOL INTUBATION INTUBATION VENTALV->INTUBATION ARTCO2 ARTCO2 VENTALV->ARTCO2 MINVOL->INTUBATION INTUBATION->PRESS INTUBATION->SHUNT BP BP TPR->BP VENTLUNG->EXPCO2 VENTLUNG->VENTALV CATECHOL CATECHOL CATECHOL->HR ERRCAUTER ERRCAUTER ERRCAUTER->HRSAT ERRCAUTER->HREKG PAP PAP PAP->PULMEMBOLUS VENTMACH->VENTTUBE CO->BP SAO2->CATECHOL
Learned with 10000 lines in 2.641s
import pyagrum.lib.bn_vs_bn as bnvsbn
gnb.flow.add(gnb.getBNDiff(bn, bn2, size="8!"), "Diff with MIIC")
gnb.flow.add(bnvsbn.graphDiffLegend())
gnb.flow.display()
G KINKEDTUBE KINKEDTUBE VENTLUNG VENTLUNG KINKEDTUBE->VENTLUNG PRESS PRESS KINKEDTUBE->PRESS HYPOVOLEMIA HYPOVOLEMIA STROKEVOLUME STROKEVOLUME HYPOVOLEMIA->STROKEVOLUME LVEDVOLUME LVEDVOLUME HYPOVOLEMIA->LVEDVOLUME INTUBATION INTUBATION SHUNT SHUNT INTUBATION->SHUNT INTUBATION->VENTLUNG MINVOL MINVOL INTUBATION->PRESS VENTALV VENTALV MINVOLSET MINVOLSET VENTMACH VENTMACH MINVOLSET->VENTMACH PULMEMBOLUS PULMEMBOLUS PAP PAP PULMEMBOLUS->SHUNT INSUFFANESTH INSUFFANESTH CATECHOL CATECHOL INSUFFANESTH->CATECHOL ERRLOWOUTPUT ERRLOWOUTPUT HRBP HRBP ERRLOWOUTPUT->HRBP ERRCAUTER ERRCAUTER HRSAT HRSAT ERRCAUTER->HRSAT HREKG HREKG ERRCAUTER->HREKG FIO2 FIO2 PVSAT PVSAT FIO2->PVSAT LVFAILURE LVFAILURE LVFAILURE->STROKEVOLUME LVFAILURE->LVEDVOLUME HISTORY HISTORY DISCONNECT DISCONNECT VENTTUBE VENTTUBE DISCONNECT->VENTTUBE ANAPHYLAXIS ANAPHYLAXIS TPR TPR ANAPHYLAXIS->TPR PAP->PULMEMBOLUS CO CO STROKEVOLUME->CO TPR->CATECHOL BP BP TPR->BP PCWP PCWP LVEDVOLUME->PCWP CVP CVP LVEDVOLUME->CVP VENTMACH->VENTTUBE SAO2 SAO2 SHUNT->SAO2 HISTORY->LVFAILURE VENTTUBE->VENTLUNG VENTTUBE->PRESS VENTLUNG->MINVOL VENTLUNG->VENTALV EXPCO2 EXPCO2 VENTLUNG->EXPCO2 MINVOL->INTUBATION VENTALV->INTUBATION VENTALV->MINVOL ARTCO2 ARTCO2 VENTALV->ARTCO2 VENTALV->PVSAT ARTCO2->EXPCO2 ARTCO2->CATECHOL PVSAT->SAO2 SAO2->CATECHOL HR HR CATECHOL->HR HR->HRBP HR->HRSAT HR->CO HR->HREKG HRSAT->HREKG CO->BP
Diff with MIIC
G a->b overflow c->d Missing e->f reversed g->h Correct
bn3 = learner.useGreedyHillClimbing().useNMLCorrection().useScoreBDeu().learnBN()
gnb.flow.add(gnb.getBNDiff(bn, bn3, size="8!"), "Diff with GHC/NMD/BDEU")
gnb.flow.add(bnvsbn.graphDiffLegend())
gnb.flow.display()
G KINKEDTUBE KINKEDTUBE VENTLUNG VENTLUNG PRESS PRESS KINKEDTUBE->PRESS HYPOVOLEMIA HYPOVOLEMIA LVFAILURE LVFAILURE HYPOVOLEMIA->LVFAILURE STROKEVOLUME STROKEVOLUME HYPOVOLEMIA->STROKEVOLUME LVEDVOLUME LVEDVOLUME INTUBATION INTUBATION SHUNT SHUNT INTUBATION->SHUNT MINVOL MINVOL INTUBATION->MINVOL INTUBATION->PRESS VENTALV VENTALV MINVOLSET MINVOLSET VENTMACH VENTMACH PULMEMBOLUS PULMEMBOLUS PAP PAP PULMEMBOLUS->PAP PULMEMBOLUS->SHUNT INSUFFANESTH INSUFFANESTH CATECHOL CATECHOL INSUFFANESTH->CATECHOL ERRLOWOUTPUT ERRLOWOUTPUT HRBP HRBP ERRCAUTER ERRCAUTER HRSAT HRSAT HREKG HREKG FIO2 FIO2 PVSAT PVSAT FIO2->PVSAT LVFAILURE->STROKEVOLUME HISTORY HISTORY LVFAILURE->HISTORY DISCONNECT DISCONNECT VENTTUBE VENTTUBE DISCONNECT->VENTTUBE ANAPHYLAXIS ANAPHYLAXIS ANAPHYLAXIS->KINKEDTUBE TPR TPR CO CO STROKEVOLUME->CO TPR->ANAPHYLAXIS BP BP TPR->BP LVEDVOLUME->HYPOVOLEMIA LVEDVOLUME->LVFAILURE PCWP PCWP LVEDVOLUME->PCWP CVP CVP LVEDVOLUME->CVP VENTMACH->MINVOLSET VENTMACH->VENTTUBE SAO2 SAO2 SHUNT->SAO2 VENTTUBE->KINKEDTUBE VENTTUBE->INTUBATION VENTTUBE->VENTLUNG VENTTUBE->PRESS EXPCO2 EXPCO2 VENTTUBE->EXPCO2 VENTLUNG->KINKEDTUBE VENTLUNG->INTUBATION VENTLUNG->MINVOL VENTLUNG->VENTALV VENTALV->INTUBATION ARTCO2 ARTCO2 VENTALV->ARTCO2 VENTALV->PVSAT ARTCO2->CATECHOL PVSAT->SAO2 SAO2->CATECHOL EXPCO2->VENTLUNG EXPCO2->VENTALV EXPCO2->ARTCO2 CATECHOL->TPR HR HR HR->ERRLOWOUTPUT HR->ERRCAUTER HR->CATECHOL HR->CO HR->HREKG HRBP->ERRLOWOUTPUT HRBP->HR HRBP->HRSAT HRSAT->ERRCAUTER HRSAT->HR CO->BP HREKG->ERRCAUTER HREKG->HRBP HREKG->HRSAT
Diff with GHC/NMD/BDEU
G a->b overflow c->d Missing e->f reversed g->h Correct
bn4 = learner.useGreedyHillClimbing().useNMLCorrection().useScoreBDeu().setInitialDAG(bn2.dag()).learnBN()
gnb.flow.add(gnb.getBNDiff(bn, bn4, size="8!"), "Diff with GHC/NMD/BDEU with intial DAG from MIIC")
gnb.flow.add(bnvsbn.graphDiffLegend())
gnb.flow.display()
G KINKEDTUBE KINKEDTUBE VENTLUNG VENTLUNG KINKEDTUBE->VENTLUNG PRESS PRESS KINKEDTUBE->PRESS HYPOVOLEMIA HYPOVOLEMIA STROKEVOLUME STROKEVOLUME HYPOVOLEMIA->STROKEVOLUME LVEDVOLUME LVEDVOLUME HYPOVOLEMIA->LVEDVOLUME INTUBATION INTUBATION SHUNT SHUNT INTUBATION->SHUNT INTUBATION->VENTLUNG MINVOL MINVOL INTUBATION->MINVOL INTUBATION->PRESS VENTALV VENTALV INTUBATION->VENTALV MINVOLSET MINVOLSET VENTMACH VENTMACH PULMEMBOLUS PULMEMBOLUS PAP PAP PULMEMBOLUS->PAP PULMEMBOLUS->SHUNT INSUFFANESTH INSUFFANESTH CATECHOL CATECHOL INSUFFANESTH->CATECHOL ERRLOWOUTPUT ERRLOWOUTPUT HRBP HRBP ERRLOWOUTPUT->HRBP ERRCAUTER ERRCAUTER HRSAT HRSAT ERRCAUTER->HRSAT HREKG HREKG ERRCAUTER->HREKG FIO2 FIO2 PVSAT PVSAT FIO2->PVSAT LVFAILURE LVFAILURE LVFAILURE->STROKEVOLUME LVFAILURE->LVEDVOLUME HISTORY HISTORY DISCONNECT DISCONNECT VENTTUBE VENTTUBE DISCONNECT->VENTTUBE ANAPHYLAXIS ANAPHYLAXIS TPR TPR CO CO STROKEVOLUME->CO TPR->ANAPHYLAXIS BP BP TPR->BP PCWP PCWP LVEDVOLUME->PCWP CVP CVP LVEDVOLUME->CVP VENTMACH->MINVOLSET VENTMACH->VENTTUBE SAO2 SAO2 SHUNT->SAO2 HISTORY->LVFAILURE VENTTUBE->VENTLUNG VENTTUBE->PRESS VENTLUNG->MINVOL VENTLUNG->VENTALV EXPCO2 EXPCO2 VENTLUNG->EXPCO2 ARTCO2 ARTCO2 VENTALV->ARTCO2 VENTALV->PVSAT ARTCO2->EXPCO2 ARTCO2->CATECHOL PVSAT->SAO2 SAO2->CATECHOL CATECHOL->TPR HR HR CATECHOL->HR HR->HRBP HR->HRSAT HR->CO HR->HREKG CO->BP
Diff with GHC/NMD/BDEU with intial DAG from MIIC
G a->b overflow c->d Missing e->f reversed g->h Correct
print(bn2.names())
{'HRSAT', 'LVFAILURE', 'FIO2', 'ERRLOWOUTPUT', 'PRESS', 'CVP', 'INSUFFANESTH', 'PULMEMBOLUS', 'MINVOLSET', 'LVEDVOLUME', 'ANAPHYLAXIS', 'KINKEDTUBE', 'HISTORY', 'PVSAT', 'EXPCO2', 'VENTTUBE', 'DISCONNECT', 'SHUNT', 'HYPOVOLEMIA', 'STROKEVOLUME', 'HR', 'VENTALV', 'MINVOL', 'INTUBATION', 'TPR', 'VENTLUNG', 'CATECHOL', 'BP', 'ERRCAUTER', 'PAP', 'ARTCO2', 'HRBP', 'VENTMACH', 'CO', 'PCWP', 'HREKG', 'SAO2'}
gnb.showInference(bn2, evs={}, size="10")

svg

print(bn2["HRSAT"])
print(bn2["INTUBATION"])
HRSAT:Labelized({HIGH|LOW|NORMAL})
INTUBATION:Labelized({ESOPHAGEAL|NORMAL|ONESIDED})
showROC(bn2, "out/train.csv", "HRSAT", "LOW", show_progress=False)
showROC(bn2, "out/train.csv", "HRSAT", "NORMAL", show_progress=False)
showROC(bn2, "out/train.csv", "HRSAT", "HIGH", show_progress=False);

svg

svg

svg

showROC(bn2, "out/train.csv", "INTUBATION", "ESOPHAGEAL", show_progress=False);

svg

showPR(bn2, "out/train.csv", "HRSAT", "LOW", show_progress=False);

svg

showPR(bn2, "out/train.csv", "INTUBATION", "ESOPHAGEAL", show_progress=False);

svg

showROC_PR(bn2, "out/train.csv", "HRSAT", "LOW", show_progress=False);

svg

showROC_PR(bn2, "out/train.csv", "INTUBATION", "ESOPHAGEAL", show_progress=False);

svg