Exemplo n.º 1
0
def test_log_post_pred():

    # Data generated with np.random.seed(2); np.random.rand(11, 4)
    X = np.array(
        [
            [0.4359949, 0.02592623, 0.54966248, 0.43532239],
            [0.4203678, 0.33033482, 0.20464863, 0.61927097],
            [0.29965467, 0.26682728, 0.62113383, 0.52914209],
            [0.13457995, 0.51357812, 0.18443987, 0.78533515],
            [0.85397529, 0.49423684, 0.84656149, 0.07964548],
            [0.50524609, 0.0652865, 0.42812233, 0.09653092],
            [0.12715997, 0.59674531, 0.226012, 0.10694568],
            [0.22030621, 0.34982629, 0.46778748, 0.20174323],
            [0.64040673, 0.48306984, 0.50523672, 0.38689265],
            [0.79363745, 0.58000418, 0.1622986, 0.70075235],
            [0.96455108, 0.50000836, 0.88952006, 0.34161365],
        ]
    )
    N, D = X.shape

    # Setup densities
    m_0 = X.mean(axis=0)
    k_0 = 0.05
    v_0 = D + 10
    S_0 = 0.5 * np.eye(D)
    prior = NIW(m_0, k_0, v_0, S_0)
    gmm = GaussianComponents(X, prior, [0, 0, 0, 1, 0, 1, 3, 4, 3, 2, -1])

    npt.assert_almost_equal(log_post_pred_unvectorized(gmm, 10), gmm.log_post_pred(10))
Exemplo n.º 2
0
def test_log_post_pred():

    # Data generated with np.random.seed(2); np.random.rand(11, 4)
    X = np.array([[0.4359949, 0.02592623, 0.54966248, 0.43532239],
                  [0.4203678, 0.33033482, 0.20464863, 0.61927097],
                  [0.29965467, 0.26682728, 0.62113383, 0.52914209],
                  [0.13457995, 0.51357812, 0.18443987, 0.78533515],
                  [0.85397529, 0.49423684, 0.84656149, 0.07964548],
                  [0.50524609, 0.0652865, 0.42812233, 0.09653092],
                  [0.12715997, 0.59674531, 0.226012, 0.10694568],
                  [0.22030621, 0.34982629, 0.46778748, 0.20174323],
                  [0.64040673, 0.48306984, 0.50523672, 0.38689265],
                  [0.79363745, 0.58000418, 0.1622986, 0.70075235],
                  [0.96455108, 0.50000836, 0.88952006, 0.34161365]])
    N, D = X.shape

    # Setup densities
    m_0 = X.mean(axis=0)
    k_0 = 0.05
    v_0 = D + 10
    S_0 = 0.5 * np.eye(D)
    prior = NIW(m_0, k_0, v_0, S_0)
    gmm = GaussianComponents(X, prior, [0, 0, 0, 1, 0, 1, 3, 4, 3, 2, -1])

    npt.assert_almost_equal(log_post_pred_unvectorized(gmm, 10),
                            gmm.log_post_pred(10))
Exemplo n.º 3
0
def test_log_post_pred_k():

    # Setup densities
    prior = NIW(m_0=np.array([0.0, 0.0]), k_0=2.0, v_0=5.0, S_0=5.0 * np.eye(2))
    gmm = GaussianComponents(np.array([[1.2, 0.9], [-0.1, 0.8], [0.5, 0.4]]), prior)

    # Add data vectors to a single component
    gmm.add_item(0, 0)
    gmm.add_item(1, 0)

    # Calculate log predictave
    lp = gmm.log_post_pred_k(2, 0)

    lp_expected = -2.07325364088
    npt.assert_almost_equal(lp, lp_expected)
Exemplo n.º 4
0
def test_map():

    # Setup densities
    prior = NIW(m_0=np.array([0.0, 0.0]), k_0=2.0, v_0=5.0, S_0=5.0 * np.eye(2))
    gmm = GaussianComponents(np.array([[1.2, 0.9], [-0.1, 0.8]]), prior)
    gmm.add_item(0, 0)
    gmm.add_item(1, 0)

    mu_expected = np.array([0.275, 0.425])
    sigma_expected = np.array([[0.55886364, 0.04840909], [0.04840909, 0.52068182]])

    # Calculate the posterior MAP of the parameters
    mu, sigma = gmm.map(0)

    npt.assert_almost_equal(mu, mu_expected)
    npt.assert_almost_equal(sigma, sigma_expected)
Exemplo n.º 5
0
def test_log_post_pred_k():

    # Setup densities
    prior = NIW(m_0=np.array([0.0, 0.0]), k_0=2., v_0=5., S_0=5. * np.eye(2))
    gmm = GaussianComponents(np.array([[1.2, 0.9], [-0.1, 0.8], [0.5, 0.4]]),
                             prior)

    # Add data vectors to a single component
    gmm.add_item(0, 0)
    gmm.add_item(1, 0)

    # Calculate log predictave
    lp = gmm.log_post_pred_k(2, 0)

    lp_expected = -2.07325364088
    npt.assert_almost_equal(lp, lp_expected)
Exemplo n.º 6
0
def test_log_prior_3d():

    # Data
    X = np.array([[-0.3406, -0.0593, -0.0686]])
    N, D = X.shape

    # Setup densities
    m_0 = np.zeros(D)
    k_0 = 0.05
    v_0 = D + 1
    S_0 = 0.001 * np.eye(D)
    prior = NIW(m_0, k_0, v_0, S_0)
    gmm = GaussianComponents(X, prior)

    # Calculate log predictave under prior alone
    lp = gmm.log_prior(0)

    lp_expected = -0.472067277015
    npt.assert_almost_equal(lp, lp_expected)
Exemplo n.º 7
0
def test_log_prior_3d():

    # Data
    X = np.array([[-0.3406, -0.0593, -0.0686]])
    N, D = X.shape

    # Setup densities
    m_0 = np.zeros(D)
    k_0 = 0.05
    v_0 = D + 1
    S_0 = 0.001 * np.eye(D)
    prior = NIW(m_0, k_0, v_0, S_0)
    gmm = GaussianComponents(X, prior)

    # Calculate log predictave under prior alone
    lp = gmm.log_prior(0)

    lp_expected = -0.472067277015
    npt.assert_almost_equal(lp, lp_expected)
Exemplo n.º 8
0
def test_log_marg_k():

    # Data
    X = np.array([[-0.3406, -0.3593, -0.0686], [-0.3381, 0.2993, 0.925], [-0.5, -0.101, 0.75]])
    N, D = X.shape

    # Setup densities
    m_0 = np.zeros(D)
    k_0 = 0.05
    v_0 = D + 3
    S_0 = 0.5 * np.eye(D)
    prior = NIW(m_0, k_0, v_0, S_0)
    gmm = GaussianComponents(X, prior, [0, 0, 0])

    log_marg_expected = -8.42365141729

    # Calculate log marginal of data
    log_marg = gmm.log_marg_k(0)

    npt.assert_almost_equal(log_marg, log_marg_expected)
Exemplo n.º 9
0
def test_map():

    # Setup densities
    prior = NIW(m_0=np.array([0.0, 0.0]),
                k_0=2.0,
                v_0=5.0,
                S_0=5.0 * np.eye(2))
    gmm = GaussianComponents(np.array([[1.2, 0.9], [-0.1, 0.8]]), prior)
    gmm.add_item(0, 0)
    gmm.add_item(1, 0)

    mu_expected = np.array([0.275, 0.425])
    sigma_expected = np.array([[0.55886364, 0.04840909],
                               [0.04840909, 0.52068182]])

    # Calculate the posterior MAP of the parameters
    mu, sigma = gmm.map(0)

    npt.assert_almost_equal(mu, mu_expected)
    npt.assert_almost_equal(sigma, sigma_expected)
Exemplo n.º 10
0
def test_log_marg_k():

    # Data
    X = np.array([[-0.3406, -0.3593, -0.0686], [-0.3381, 0.2993, 0.925],
                  [-0.5, -0.101, 0.75]])
    N, D = X.shape

    # Setup densities
    m_0 = np.zeros(D)
    k_0 = 0.05
    v_0 = D + 3
    S_0 = 0.5 * np.eye(D)
    prior = NIW(m_0, k_0, v_0, S_0)
    gmm = GaussianComponents(X, prior, [0, 0, 0])

    log_marg_expected = -8.42365141729

    # Calculate log marginal of data
    log_marg = gmm.log_marg_k(0)

    npt.assert_almost_equal(log_marg, log_marg_expected)