Esempio n. 1
0
def main():

    # Data parameters
    D = 1  # dimensions
    N = 100  # number of points to generate
    K_true = 4  # the true number of components

    # Model parameters
    alpha = 1.
    K = 3  # initial number of components
    n_iter = 40

    # Generate data
    mu_scale = 4.0
    covar_scale = 0.7
    z_true = np.random.randint(0, K_true, N)
    logging.info("true clustering: {}".format(collections.Counter(z_true)))
    mu = np.random.randn(D, K_true) * mu_scale
    X = mu[:, z_true] + np.random.randn(D, N) * covar_scale
    X = X.T

    # Intialize prior
    m_0 = np.zeros(D)
    k_0 = covar_scale**2 / mu_scale**2
    v_0 = D + 3
    S_0 = covar_scale**2 * v_0 * np.eye(D)
    prior = NIW(m_0, k_0, v_0, S_0)

    # Setup PCRPMM
    pcrpmm = PCRPMM(X, prior, alpha, save_path=None, assignments="rand", K=K)
    # pcrpmm = PCRPMM(X, prior, alpha, save_path=None, assignments="one-by-one", K=K)

    # Perform collapsed Gibbs sampling
    record_dict, distribution_dict = pcrpmm.collapsed_gibbs_sampler(
        n_iter, z_true, n_power=1.01, num_saved=K_true)
Esempio n. 2
0
def main():

    # Data parameters
    D = 2  # dimensions
    N = 100  # number of points to generate
    K_true = 4  # the true number of components

    # Model parameters
    alpha = 1.
    K = 3  # initial number of components
    n_iter = 40

    # Generate data
    mu_scale = 4.0
    covar_scale = 0.7
    z_true = np.random.randint(0, K_true, N)
    logging.info("true clustering: {}".format(collections.Counter(z_true)))
    mu = np.random.randn(D, K_true) * mu_scale
    X = mu[:, z_true] + np.random.randn(D, N) * covar_scale
    X = X.T

    # Intialize prior
    m_0 = np.zeros(D)
    k_0 = covar_scale**2 / mu_scale**2
    v_0 = D + 3
    S_0 = covar_scale**2 * v_0 * np.eye(D)
    prior = NIW(m_0, k_0, v_0, S_0)

    ## setup save path
    save_path = os.path.dirname(__file__) + '/tmp_res/'
    try:
        os.stat(save_path)
    except:
        os.mkdir(save_path)

    # Setup CRPMM
    crpmm = CRPMM(X,
                  prior,
                  alpha,
                  save_path=save_path,
                  assignments="rand",
                  K=K)
    # crpmmmm = CRPMM(X, prior, alpha, save_path=save_path, assignments="one-by-one", K=K)

    # Perform collapsed Gibbs sampling
    record_dict = crpmm.collapsed_gibbs_sampler(n_iter, z_true)

    # Plot results
    fig = plt.figure()
    ax = fig.add_subplot(111)
    plot_mixture_model(ax, crpmm)
    for k in xrange(crpmm.components.K):
        mu, sigma = crpmm.components.rand_k(k)
        plot_ellipse(ax, mu, sigma)
    plt.show()
Esempio n. 3
0
def main():

    # Data parameters
    D = 1  # dimensions
    N = 100  # number of points to generate
    K_true = 4  # the true number of components

    # Model parameters
    alpha = 1.
    K = 4  # initial number of components
    n_iter = 40  ## number of iteration, change it to larger value

    # Generate data
    mu_scale = 4.0
    covar_scale = 0.7
    z_true = np.random.randint(0, K_true, N)
    logging.info("true clustering: {}".format(collections.Counter(z_true)))
    mu = np.random.randn(D, K_true) * mu_scale
    X = mu[:, z_true] + np.random.randn(D, N) * covar_scale
    X = X.T

    # Intialize prior
    m_0 = np.zeros(D)
    k_0 = covar_scale**2 / mu_scale**2
    v_0 = D + 3
    S_0 = covar_scale**2 * v_0 * np.eye(D)
    prior = NIW(m_0, k_0, v_0, S_0)

    # Setup CRPMM
    igmm = CSCRPMM(X, prior, alpha, save_path=None, assignments="rand", K=K)

    # igmm = CRPMM(X, prior, alpha, save_path=None, assignments="one-by-one", K=K)

    # Perform collapsed Gibbs sampling
    #igmm.collapsed_gibbs_sampler(n_iter, z_true)
    igmm.constrained_gibbs_sample(n_iter,
                                  z_true,
                                  flag_constrain=True,
                                  n_constrain=2,
                                  thres=0.04,
                                  num_saved=4)