Pastebin

Paste #1290: Likelihood weighting

< previous paste - next paste>

Pasted by Morten

Download View as text

from lib import *

def weighted_sample(bn,e):

    #Initializing event to return and the weight
    x = {}
    w = 1.0

    for node in bn.nodes:
        cur_evidence = None

        #Asserting whether current node is an evidence node
        for node_name in e.keys():
            if node_name == node.name:
                cur_evidence = e[node_name]
                break

        if(cur_evidence):
            w = w * get_sample(node,cur_evidence)
            x[node.name] = cur_evidence
        else:
            #Since node is not an evidence node, only sample from it.
            x[node.name] = get_sample(node,None)
   
    #Resetting sample values
    for node in bn.nodes:
        node.current_sample = 0

    return (x,w)


def likelihood_weighting(X,e,bn,N):

    W = {}
    for value in X.values:
        W[value] = 0.0

    for i in range(0,N):
        (x,w) = weighted_sample(bn,e)
        W[x[X.name]] += w

    #Normalizing
    val_sum = 0.0
    for val in W.keys():
        val_sum += W[val]
  
    for val in W.keys():
        W[val] = W[val]/val_sum

    return W

print likelihood_weighting(node_uw,{'S':'true','T':'true','W':'true'},b_network,10000)

New Paste


Do not write anything in this field if you're a human.

Go to most recent paste.