netp.define_nodes() # compile the net netp.compile_net() # enable auto updating netp.set_autoupdate() # save the network netp.save_net('ChestClinicNew.dne') # prior belief beliefs = netp.get_node_beliefs(tuberculosis) belief = beliefs[0] print 'The probability of tuberculosis is {:f}\n'.format(belief) # posterior belief netp.enter_finding(xRay, 0) beliefs = netp.get_node_beliefs(tuberculosis) belief = beliefs[0] print 'Given an abnormal X-ray,' print ' the probability of tuberculosis is {:f}\n'.format(belief) netp.enter_finding(visitAsia, 0) beliefs = netp.get_node_beliefs(tuberculosis) belief = beliefs[0] print 'Given an abnormal X-ray and a visit to Asia,' print ' the probability of tuberculosis is {:f}\n'.format(belief) netp.enter_finding(cancer, 0) beliefs = netp.get_node_beliefs(tuberculosis) belief = beliefs[0] print 'Given abnormal X-ray, Asia visit, and lung cancer,'
dbnet.set_autoupdate() # save the network dbnet.save_net("Straub2010Ex2.dne") # no evidence print "Prior Belief:" beta0 = [] for e in earray[1:]: beliefs = dbnet.get_node_beliefs(e) beta0.append(-stats.norm.ppf(beliefs[1])) uhbeliefs0 = dbnet.get_node_beliefs(uh) # evidence 1: survive up to year 5, h5=80 print "Evidence 1: survive up to year 5, h5=80" for e in earray[1:6]: dbnet.enter_finding(e,0) h5ev = 80 h5 = harray[4] h5state = np.searchsorted(h5.bins, h5ev)-1 dbnet.enter_finding(h5, h5state) beta1 = [] for e in earray[1:]: beliefs = dbnet.get_node_beliefs(e) beta1.append(-stats.norm.ppf(beliefs[1])) uhbeliefs1 = dbnet.get_node_beliefs(uh) # evidence 2: survive up to year 5, hi = 30, h5=80 dbnet.retract_netfindings() print "Evidence 2: survive up to year 5, hi=30, h5=80" for e in earray[1:6]:
# add link: must before define nodes dbnet.add_link() # define nodes dbnet.define_nodes() # compile the net dbnet.compile_net() # enable autoupdate dbnet.set_autoupdate() # save the network dbnet.save_net("BNdecision.dne") # decision making # type 1 dbnet.enter_finding(forecast, 0) utils = dbnet.get_node_expectedutils(umbrella) print 'If the forecast is sunny, expected utility of {} is {}, of {} is {}\n'.format( umbrella.statenames[0], utils[0], umbrella.statenames[1], utils[1]) dbnet.retract_netfindings() dbnet.enter_finding(forecast, 1) utils = dbnet.get_node_expectedutils(umbrella) print 'If the forecast is cloudy, expected utility of {} is {}, of {} is {}\n'.format( umbrella.statenames[0], utils[0], umbrella.statenames[1], utils[1]) dbnet.retract_netfindings() dbnet.enter_finding(forecast, 2) utils = dbnet.get_node_expectedutils(umbrella)
dbnet.save_net("Straub2010Ex1.dne") # prior belief beliefs = dbnet.get_node_beliefs(e) print "Prior Belief:" for i in xrange(e.nstates()): print 'The probability of {} is {:f}'.format(e.statenames[i], beliefs[i]) # posterior belief 1 m4measure = 50; m5measure=100 m4state = np.searchsorted(m4.bins, m4measure)-1 if m4state<0: m4state=0 m5state = np.searchsorted(m5.bins, m5measure)-1 if m5state<0: m5state=0 dbnet.enter_finding(m4, m4state) dbnet.enter_finding(m5, m5state) beliefs = dbnet.get_node_beliefs(e) print "\nPosterior Belief:" for i in xrange(e.nstates()): print 'Given m4={:.1f} and m5={:.1f}, the probability of {} is {:f}'.format(m4measure, m5measure, e.statenames[i], beliefs[i]) r4beliefs = dbnet.get_node_beliefs(r4) r5beliefs = dbnet.get_node_beliefs(r5) r4rvs = [r4.truncate_rv(pstate) for pstate in np.arange(r4.nstates())] r5rvs = [r5.truncate_rv(pstate) for pstate in np.arange(r5.nstates())] np.savez('bndiscrete10.npz', r4beliefs=r4beliefs, r5beliefs=r5beliefs, r4bins=r4.bins, r5bins=r5.bins, r4rvs=r4rvs, r5rvs=r5rvs) # posterior belief 2 dbnet.retract_nodefindings(m4) #dbnet.retract_netfindings()
dbnet.set_autoupdate() # save the network dbnet.save_net("Straub2010Ex2.dne") # no evidence print "Prior Belief:" beta0 = [] for e in earray[1:]: beliefs = dbnet.get_node_beliefs(e) beta0.append(-stats.norm.ppf(beliefs[1])) uhbeliefs0 = dbnet.get_node_beliefs(uh) # evidence 1: survive up to year 5, h5=80 print "Evidence 1: survive up to year 5, h5=80" for e in earray[1:6]: dbnet.enter_finding(e, 0) h5ev = 80 h5 = harray[4] h5state = np.searchsorted(h5.bins, h5ev) - 1 dbnet.enter_finding(h5, h5state) beta1 = [] for e in earray[1:]: beliefs = dbnet.get_node_beliefs(e) beta1.append(-stats.norm.ppf(beliefs[1])) uhbeliefs1 = dbnet.get_node_beliefs(uh) # evidence 2: survive up to year 5, hi = 30, h5=80 dbnet.retract_netfindings() print "Evidence 2: survive up to year 5, hi=30, h5=80" for e in earray[1:6]: dbnet.enter_finding(e, 0)
# statesvalues = x1.statenames.astype(float) x1stats = x1.node_stats(x1beliefs) print 'The mean of {} is {:f}'.format(x1.name, x1stats[0]) print 'The std of {} is {:f}'.format(x1.name, np.sqrt(x1stats[1])) x2beliefs = dbnet.get_node_beliefs(x2) # statesvalues = x2.statenames.astype(float) x2stats = x2.node_stats(x2beliefs, lmd=lmd) print 'The mean of {} is {:f}'.format(x2.name, x2stats[0]) print 'The std of {} is {:f}'.format(x2.name, np.sqrt(x2stats[1])) optx, dummy = x2.fit_stats('lognormal', x2beliefs, lmd=lmd) print 'The mean of {} by fitting cdf is {:f}'.format(x2.name, optx[0]) print 'The std of {} by fitting cdf is {:f}'.format(x2.name, np.sqrt(optx[1])) # posterior belief dbnet.enter_finding(x1, 2) beliefs = dbnet.get_node_beliefs(y) print "\nPosterior Belief:" for i in xrange(y.nstates()): print 'The probability of {} is {:f}'.format(y.statenames[i], beliefs[i]) #dbnet.enter_finding(y, 'init') #x1beliefs = dbnet.get_node_beliefs(x1) #statesvalues = x1.statenames.astype(float) #x1stats = x1.node_stats(x1beliefs) #print "\nPosterior Belief:" #print 'The posterior mean of {} is {:f}'.format(x1.name, x1stats[0]) #print 'The posterior std of {} is {:f}'.format(x1.name, np.sqrt(x1stats[1])) #optx, dummy = x1.fit_stats('lognormal', x1beliefs, lmd=lmd) #print 'The mean of {} by fitting cdf is {:f}'.format(x1.name, optx[0]) #print 'The std of {} by fitting cdf is {:f}'.format(x1.name, np.sqrt(optx[1]))
# prior belief beliefs = dbnet.get_node_beliefs(e) print "Prior Belief:" for i in xrange(e.nstates()): print 'The probability of {} is {:f}'.format(e.statenames[i], beliefs[i]) # posterior belief 1 m4measure = 50 m5measure = 100 m4state = np.searchsorted(m4.bins, m4measure) - 1 if m4state < 0: m4state = 0 m5state = np.searchsorted(m5.bins, m5measure) - 1 if m5state < 0: m5state = 0 dbnet.enter_finding(m4, m4state) dbnet.enter_finding(m5, m5state) beliefs = dbnet.get_node_beliefs(e) print "\nPosterior Belief:" for i in xrange(e.nstates()): print 'Given m4={:.1f} and m5={:.1f}, the probability of {} is {:f}'.format( m4measure, m5measure, e.statenames[i], beliefs[i]) r4beliefs = dbnet.get_node_beliefs(r4) r5beliefs = dbnet.get_node_beliefs(r5) r4rvs = [r4.truncate_rv(pstate) for pstate in np.arange(r4.nstates())] r5rvs = [r5.truncate_rv(pstate) for pstate in np.arange(r5.nstates())] np.savez('bndiscrete10.npz', r4beliefs=r4beliefs, r5beliefs=r5beliefs, r4bins=r4.bins, r5bins=r5.bins,
# load net from dbn file dbnet = Network('Soliman2014DBN', file='Soliman2014DBN.dne') # compile the net dbnet.compile_net() # enable autoupdate dbnet.set_autoupdate() m3 = dbnet.find_nodenamed('M3') if m3 == 'error': print "ERROR: cannot find node M3" sys.exit(1) m3meaure = 0.6 m3edges = statename2edges(m3.statenames) m3bins = np.hstack((-np.inf, m3edges, np.inf)) m3state = np.searchsorted(m3bins, m3meaure)-1 dbnet.enter_finding(m3, m3state) a5 = dbnet.find_nodenamed('A5') if a5 == 'error': print "ERROR: cannot find node A5" sys.exit(1) a5edges = statename2edges(a5.statenames) a5bins = np.hstack((0., a5edges, np.inf)) a5.set_bins(a5bins) beliefs = dbnet.get_node_beliefs(a5) dbncdf = a5.node_cdf(a5.bins[1:-1], beliefs, lmd=100.) # comparison asmpmcmc = np.load('asmpmcmc.npy') a = asmpmcmc[-1,:] num_bins = 20 counts, bin_edges = np.histogram(a, bins=num_bins, normed=True)
dbnet.add_nodes([weather, forecast, umbrella, satisfy]) # add link: must before define nodes dbnet.add_link() # define nodes dbnet.define_nodes() # compile the net dbnet.compile_net() # enable autoupdate dbnet.set_autoupdate() # save the network dbnet.save_net("BNdecision.dne") # decision making # type 1 dbnet.enter_finding(forecast, 0) utils = dbnet.get_node_expectedutils(umbrella) print 'If the forecast is sunny, expected utility of {} is {}, of {} is {}\n'.format( umbrella.statenames[0], utils[0], umbrella.statenames[1], utils[1]) dbnet.retract_netfindings() dbnet.enter_finding(forecast, 1) utils = dbnet.get_node_expectedutils(umbrella) print 'If the forecast is cloudy, expected utility of {} is {}, of {} is {}\n'.format( umbrella.statenames[0], utils[0], umbrella.statenames[1], utils[1]) dbnet.retract_netfindings() dbnet.enter_finding(forecast, 2) utils = dbnet.get_node_expectedutils(umbrella) print 'If the forecast is rainy, expected utility of {} is {}, of {} is {}\n'.format( umbrella.statenames[0], utils[0], umbrella.statenames[1], utils[1])