示例#1
0
def create_node_a(name,
                  parents,
                  ainum,
                  ailb,
                  aiub,
                  aiedges,
                  node_repair=None,
                  asmp0=None):
    if node_repair is None:
        node_ai = Node(name, parents=parents, rvname='continuous')
    else:
        node_ai = Node(name,
                       parents=parents + [node_repair],
                       rvname='continuous')
    # dynamic discretization of nodes a and M
    node_ap = parents[0]
    knum = parents[1].nstates()
    mnum = parents[2].nstates()
    ainames = node_ai.discretize(ailb, aiub, ainum, infinity='+', bins=aiedges)
    aibins = node_ai.bins
    if node_repair is None:
        labels = itertools.product(np.arange(node_ap.nstates()),
                                   np.arange(knum), np.arange(mnum))
    else:
        labels = itertools.product(np.arange(node_ap.nstates()),
                                   np.arange(knum), np.arange(mnum),
                                   np.arange(2))
    labels = [label for label in labels]
    for i, label in enumerate(labels):
        if len(label) == 4 and label[-1] == 1:
            binnum, dummy = np.histogram(asmp0, aibins)
            probs = binnum / np.sum(binnum, dtype=float)
            node_ai.assign_cpt(probs,
                               label=np.asarray(label),
                               statenames=node_ai.statenames)
        else:
            truncrvs = []
            for j, pstate in enumerate(label):
                truncrvs.append(node_ai.parents[j].truncate_rv(pstate,
                                                               lmd=trunclmd))
            rvnames = ['Ap', 'K', 'M']
            rvs = truncrvs[:3]
            probs, smpdb = mc2ai(rvnames, rvs, node_ai.bins, acrit, nsmp=nsmp)
            # clean Ai states given Ai-1
            apstate = label[0]
            aplb = node_ap.bins[apstate]
            aiubs = node_ai.bins[1:]
            probs[aiubs <= aplb] = 0.
            probs = probs / np.sum(probs)
            node_ai.assign_cpt(probs,
                               label=np.asarray(label),
                               statenames=node_ai.statenames)
        # print 'labels: {}, progress: {}%, prob: {}'.format(label,
        # float(i)/len(labels)*100, np.array_str(probs,precision=3))
    return node_ai
示例#2
0
def create_node_a(name, parents, ainum, ailb, aiub, aiedges, node_repair=None, asmp0=None):
    if node_repair is None:
        node_ai = Node(name, parents=parents, rvname='continuous')
    else:
        node_ai = Node(name, parents=parents+[node_repair], rvname='continuous')
    # dynamic discretization of nodes a and M
    node_ap = parents[0]
    knum = parents[1].nstates()
    mnum = parents[2].nstates()
    ainames = node_ai.discretize(ailb, aiub, ainum, infinity='+', bins=aiedges)
    aibins = node_ai.bins
    if node_repair is None:
        labels = itertools.product(np.arange(node_ap.nstates()), np.arange(knum),np.arange(mnum))
    else:
        labels = itertools.product(np.arange(node_ap.nstates()), np.arange(knum),
                np.arange(mnum), np.arange(2))
    labels = [label for label in labels]
    for i,label in enumerate(labels):
        if len(label)==4 and label[-1] == 1:
            binnum,dummy = np.histogram(asmp0, aibins)
            probs = binnum/np.sum(binnum, dtype=float)
            node_ai.assign_cpt(probs,label=np.asarray(label),statenames=node_ai.statenames)
        else:
            truncrvs=[]
            for j,pstate in enumerate(label):
                truncrvs.append(node_ai.parents[j].truncate_rv(pstate,lmd=trunclmd))
            rvnames = ['Ap', 'K', 'M']
            rvs = truncrvs[:3]
            probs,smpdb = mc2ai(rvnames, rvs, node_ai.bins, acrit, nsmp=nsmp)
            # clean Ai states given Ai-1
            apstate = label[0]
            aplb = node_ap.bins[apstate]
            aiubs = node_ai.bins[1:]
            probs[aiubs<=aplb] = 0.
            probs = probs/np.sum(probs)
            node_ai.assign_cpt(probs,label=np.asarray(label),statenames=node_ai.statenames)
        # print 'labels: {}, progress: {}%, prob: {}'.format(label,
            # float(i)/len(labels)*100, np.array_str(probs,precision=3))
    return node_ai
示例#3
0
                              aiub,
                              minum,
                              infinity='+-',
                              bins=aiedges)
 nstate = ainum
 labels = itertools.product(np.arange(node_ap.nstates()),
                            np.arange(knum), np.arange(mnum))
 labels = [label for label in labels]
 for i, label in enumerate(labels):
     truncrvs = []
     for j, pstate in enumerate(label):
         truncrvs.append(node_ai.parents[j].truncate_rv(pstate,
                                                        lmd=trunclmd))
     rvnames = ['Ap', 'K', 'M']
     rvs = truncrvs
     probs, smpdb = mc2ai(rvnames, rvs, node_ai.bins, acrit, nsmp=nsmp)
     # clean Ai states given Ai-1
     apstate = label[0]
     aplb = node_ap.bins[apstate]
     aiubs = node_ai.bins[1:]
     probs[aiubs <= aplb] = 0.
     probs = probs / np.sum(probs)
     print 'labels: {}, progress: {}%, prob: {}'.format(
         label,
         float(i) / len(labels) * 100, np.array_str(probs, precision=3))
     node_ai.assign_cpt(probs,
                        label=np.asarray(label),
                        statenames=node_ai.statenames)
 # node mi
 nstate = minum
 labels = itertools.product(np.arange(ainum))
示例#4
0
 else:
     aibins = np.linspace(0., aiub, ainum-1)
 aibins = np.hstack((aibins,acrit+1e-3))
 ainames = node_ai.discretize(ailb, aiub, ainum, infinity='+', bins=aibins)
 minames = node_mi.discretize(ailb, aiub, minum, infinity='+-', bins=aibins)
 nstate = ainum
 # ai = Node("A"+str(i+1), parents=[aarray[-1], node_k, node_m], rvname='continuous')
 labels = itertools.product(np.arange(node_ap.nstates()), np.arange(knum),np.arange(mnum))
 labels = [label for label in labels]
 for i,label in enumerate(labels):
     truncrvs=[]
     for j,pstate in enumerate(label):
         truncrvs.append(node_ai.parents[j].truncate_rv(pstate,lmd=trunclmd))
     rvnames = ['Ap', 'K', 'M']
     rvs = truncrvs
     probs,smpdb = mc2ai(rvnames, rvs, node_ai.bins, acrit, nsmp=nsmp)
     # clean Ai states given Ai-1
     apstate = label[0]
     aplb = node_ap.bins[apstate]
     aiubs = node_ai.bins[1:]
     probs[aiubs<=aplb] = 0.
     probs = probs/np.sum(probs)
     print 'labels: {}, progress: {}%, prob: {}'.format(label,
         float(i)/len(labels)*100, np.array_str(probs,precision=3))
     node_ai.assign_cpt(probs,label=np.asarray(label),statenames=node_ai.statenames)
 # node mi
 nstate = minum
 labels = itertools.product(np.arange(ainum))
 labels = [label for label in labels]
 for i,label in enumerate(labels):
     truncrvs=[]