Пример #1
0
def new_feature(Y, Z, W, tree, ext, K, res, sig, sig_w):
    ctree, ptree = tree
    Z, W, tree = drop_feature(Z, W, tree)
    F, D = get_FD(tree)
    if F > 8:
        return (Z, W, tree)
    else:
        if F + ext < K:
            more = K - F
        else:
            more = ext
        tree = add(tree, more, res)
        Z = draw_feature(Z, tree, res, more)
        W = np.vstack((W, np.random.normal(0, sig_w, (more, T))))
    #W = sample_W(Y,Z,sig,sig_w)
    return (Z, W, tree)
Пример #2
0
def new_feature(Y, Z, W, tree, ext, K, res, sig, sig_w, drop):
    ctree, ptree = tree
    #debugging invariant
    vec = get_vec(tree)
    Z, W, tree = drop_feature(Z, W, tree)
    F, D = get_FD(tree)
    if F >= 12 or drop:
        return (Z, W, tree)
    else:
        if F + ext < K:
            more = K - F
        else:
            more = ext
        tree = add(tree, more, res)
        Z = draw_feature(Z, tree, res, more)
        W = np.vstack((W, np.random.normal(0, sig_w, (more, T))))
    #W = sample_W(Y,Z,sig,sig_w)
    return (Z, W, tree)
Пример #3
0
def add_feature(i,Y,Z,W,tree,vec,prior,sig,sig_w):
    N,T = Y.shape
    N,K = Z.shape
    old = log_data_zw(Y,Z,W,sig)
    col = np.zeros((N,1))
    col[i,0] = 1
    Z_new = np.hstack((Z,col))
    W_new = np.vstack((W,np.random.normal(0,sig_w,(1,T))))
    #W_new = sample_W(Y,Z_new,sig,sig_w)
    new = log_data_zw(Y,Z_new,W_new,sig)
    new = new - old
    old = 0
    roulette = [np.exp(old)*prior[0],np.exp(new)*prior[1]]
    normal_roulette = [float(r)/np.sum(roulette) for r in roulette]
    chosen = int(np.where(np.random.multinomial(1,normal_roulette) == 1)[0])
    if chosen:
        Z = Z_new
        W = W_new
        tree = add(tree,res)
        vec = get_vec(tree)
    return (Z,W,tree,vec)