Пример #1
0
from Factor import *
from PGMcommon import *
from CliqueTree import *
from CliqueTreeOperations import *
from FactorOperations import *
import scipy.io as sio
import numpy as np
import pprint
import pdb
matfile='/Users/amit/BC_Classes/PGM/Prog4/PA4Sample.mat'
mat_contents=sio.loadmat(matfile)
mat_struct=mat_contents['SumProdCalibrate']
val=mat_struct[0,0]
input_edges = val['INPUT']['edges'][0][0]
input_cliqueList= val['INPUT']['cliqueList'][0][0][0]
clique_list_factorObj=[]
for tpl in input_cliqueList:
    (var, card, values)=tpl
    f= Factor( var[0].tolist(), card[0].tolist(), values[0].tolist(), 'factor' )
    clique_list_factorObj.append(f)

P=CliqueTree( clique_list_factorObj ,  input_edges, clique_list_factorObj, [])

P=CliqueTreeCalibrate(P)

for f in P.getNodeList():
    print f
    print "=="
from Factor import *
from PGMcommon import *
from CliqueTree import *
from CliqueTreeOperations import *
from FactorOperations import *
import scipy.io as sio
import numpy as np
import pprint
import pdb
matfile='/Users/amit/BC_Classes/PGM/Prog4/PA4Sample.mat'
mat_contents=sio.loadmat(matfile)
mat_struct=mat_contents['MaxSumCalibrate']
val=mat_struct[0,0]
input_edges = val['INPUT']['edges'][0][0]
#print input_edges
input_cliqueList= val['INPUT']['cliqueList'][0][0][0]
clique_list_factorObj=[]
for tpl in input_cliqueList:
    (var, card, values)=tpl
    f= Factor( var[0].tolist(), card[0].tolist(), values[0].tolist(), 'factor' )
    #print f 
    clique_list_factorObj.append(f)

P=CliqueTree( clique_list_factorObj ,  input_edges, clique_list_factorObj, [])

P=CliqueTreeCalibrate(P,1)

for f in P.getNodeList():
    print f
    print "=="
Пример #3
0
np.shape(mat_struct)
val = mat_struct[0, 0]

input_edges = val['INPUT1']['edges'][0][0]
input_cliqueList = val['INPUT1']['cliqueList'][0][0][0]
clique_list_factorObj = []
for tpl in input_cliqueList:
    (var, card, values) = tpl
    f = Factor(var[0].tolist(), card[0].tolist(), values[0].tolist(), 'factor')
    clique_list_factorObj.append(f)

messages = val['INPUT2']
messageFactors = []
(nrow, ncol) = np.shape(messages)
for i in range(nrow):
    for j in range(ncol):
        (var, card, values) = messages[i][j]
        f = Factor(var[0].tolist(), card[0].tolist(), values[0].tolist(),
                   'factor')
        messageFactors.append(f)
MESSAGES = np.reshape(np.array(messageFactors), (nrow, ncol))
""" dump it to Python pickle file """
with open('GetNextC.INPUT1.pickle', 'wb') as f:
    pickle.dump(clique_list_factorObj, f)
with open('GetNextC.INPUT2.pickle', 'wb') as f:
    pickle.dump(MESSAGES, f)

P = CliqueTree(clique_list_factorObj, input_edges, clique_list_factorObj, [])
(a, b) = getNextClique(P, MESSAGES)
print 'a: ', a, ' b:', b
Пример #4
0
def createCliqueTree(factorList, E=[]):
    """ return a Clique Tree object given a list of factors
        it peforms VE and returns the clique tree the VE
        ordering defines. See Chapter 9 of Friedman and Koller
        Probabilistic Graphical Models"""

    V = getUniqueVar(factorList)

    totalVars = len(V)
    cardinality = np.zeros(len(V)).tolist()
    for i in range(len(V)):
        for j in range(len(factorList)):
            try:
                indx = factorList[j].getVar().tolist().index(V[i])
                cardinality[i] = factorList[j].getCard().tolist()[indx]
                break
            except:
                continue

    edges = np.zeros((totalVars, totalVars))
    """ Set up adjacency matrix: for each factor, get the list of variables in its scope and create an edge between each variable in the factor """
    for f in factorList:
        variableList = f.getVar()
        for j in range(len(variableList)):
            for k in range(len(variableList)):
                edges[variableList[j] - 1, variableList[k] - 1] = 1

    (nrows, nedges) = np.shape(edges)

    C = CliqueTree()
    C.setCard(cardinality)
    C.setEdges(np.zeros((totalVars, totalVars)))
    C.setFactorList(factorList)
    C.setEvidence(E)
    C.setNodeList([])
    #print 'length of factorList: ', len(factorList)
    #print C.toString()
    cliquesConsidered = 0
    #pdb.set_trace()
    while cliquesConsidered < len(V):
        bestClique = 0
        bestScore = sys.maxint
        for i in range(nrows):
            score = np.sum(edges[i, :])
            if score > 0 and score < bestScore:
                bestScore = score
                bestClique = i + 1
        cliquesConsidered += 1

        (edges, factorList) = C.eliminateVar(bestClique, edges, factorList)

    return C
Пример #5
0
def createCliqueTree( factorList,E=[]):
    """ return a Clique Tree object given a list of factors
        it peforms VE and returns the clique tree the VE
        ordering defines. See Chapter 9 of Friedman and Koller
        Probabilistic Graphical Models"""

    V=getUniqueVar(factorList)
    
    totalVars=len(V)
    cardinality=np.zeros(len(V)).tolist()
    for i in range(len(V)):
        for j in range(len(factorList)):
            try:
                indx= factorList[j].getVar().tolist().index( V[i] )
                cardinality[i]=factorList[j].getCard().tolist()[indx]
                break
            except:
                continue

    edges=np.zeros( (totalVars, totalVars))


    """ Set up adjacency matrix: for each factor, get the list of variables in its scope and create an edge between each variable in the factor """
    for f in factorList:
        variableList=f.getVar()
        for j in range(len(variableList) ):
            for k in range (len(variableList) ):
                edges[ variableList[j]-1, variableList[k]-1 ]=1

    (nrows,nedges)=np.shape(edges)            

    C=CliqueTree()
    C.setCard( cardinality )
    C.setEdges(np.zeros( (totalVars, totalVars)))
    C.setFactorList(factorList)
    C.setEvidence(E)
    C.setNodeList([])
    #print 'length of factorList: ', len(factorList)
    #print C.toString()
    cliquesConsidered = 0
    #pdb.set_trace()
    while cliquesConsidered < len(V):
        bestClique = 0
        bestScore = sys.maxint
        for i in range(nrows):
            score=np.sum( edges[i,:] )
            if score > 0 and score < bestScore:
                bestScore = score
                bestClique = i+1
        cliquesConsidered+=1
    
        (edges, factorList)=C.eliminateVar(bestClique, edges, factorList)

    return C