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.
![]() | ![]() |
import pyagrum as gumimport pyagrum.lib.notebook as gnb
from pyagrum.lib.bn2roc import showROC, showPR, showROC_PR
SIZE_LEARN = 10000SIZE_VALID = 2000bn = gum.loadBN("res/alarm.dsl")bngum.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 : -150642.1695277766out/train.csv: 0%| |
out/train.csv: 100%|███████████████████████████████████████|
Log2-Likelihood : -30290.465260753102
-30290.465260753102Learning a BN from learn.csv
Section titled “Learning a BN from learn.csv”## Learning a BN from the databaselearner = 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()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()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()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()print(bn2.names()){'PAP', 'HREKG', 'SAO2', 'ANAPHYLAXIS', 'TPR', 'HRSAT', 'DISCONNECT', 'CO', 'PCWP', 'SHUNT', 'INTUBATION', 'CATECHOL', 'BP', 'VENTTUBE', 'STROKEVOLUME', 'MINVOLSET', 'HISTORY', 'VENTALV', 'INSUFFANESTH', 'FIO2', 'CVP', 'EXPCO2', 'VENTLUNG', 'PULMEMBOLUS', 'MINVOL', 'VENTMACH', 'ERRLOWOUTPUT', 'HR', 'PVSAT', 'HYPOVOLEMIA', 'LVEDVOLUME', 'ERRCAUTER', 'ARTCO2', 'KINKEDTUBE', 'LVFAILURE', 'HRBP', 'PRESS'}gnb.showInference(bn2, evs={}, size="10")Two classifiers from the learned BN
Section titled “Two classifiers from the learned BN”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);showROC(bn2, "out/train.csv", "INTUBATION", "ESOPHAGEAL", show_progress=False);showPR(bn2, "out/train.csv", "HRSAT", "LOW", show_progress=False);showPR(bn2, "out/train.csv", "INTUBATION", "ESOPHAGEAL", show_progress=False);showROC_PR(bn2, "out/train.csv", "HRSAT", "LOW", show_progress=False);showROC_PR(bn2, "out/train.csv", "INTUBATION", "ESOPHAGEAL", show_progress=False);
