def calc_error(truth_dict):
        model = plda.Model(truth_dict['data'], truth_dict['labels'])

        Phi_w = truth_dict['Phi_w']
        likelihood_means = truth_dict['means']

        dim = Phi_w.shape[0]
        test_data = np.random.randint(-100, 100, (10, dim))

        expected = []
        predicted = []
        for mean, label in zip(truth_dict['means'], truth_dict['labels']):
            true_logps = gaussian(mean, Phi_w).logpdf(test_data)
            true_logps -= logsumexp(true_logps)

            test_U = model.transform(test_data, 'D', 'U_model')
            predicted_logps = model.calc_logp_posterior_predictive(
                test_U, label)
            predicted_logps -= logsumexp(predicted_logps)

            expected.append(true_logps)
            predicted.append(predicted_logps)

        expected = np.asarray(expected)
        predicted = np.asarray(predicted)

        error = calc_mean_squared_error(expected, predicted, as_log=True)

        return error
Exemple #2
0
def test_calc_same_diff_likelihood_ratio():
    np.random.seed(1234)

    n_k = 100
    K = 7
    dim = 10

    data_dictionary = generate_data(n_k, K, dim)
    X_train = data_dictionary['data'][:500]

    Y = data_dictionary['labels'][:500]
    model = plda.Model(X_train, Y)

    X_infer_category_1 = data_dictionary['data'][500:600]
    X_infer_category_1 = model.transform(X_infer_category_1, 'D', 'U_model')
    X_infer_category_2 = data_dictionary['data'][600:]
    X_infer_category_2 = model.transform(X_infer_category_2, 'D', 'U_model')

    similarity_1v2 = model.calc_same_diff_likelihood_ratio(X_infer_category_1, X_infer_category_2)
    similarity_2v2 = model.calc_same_diff_likelihood_ratio(
        X_infer_category_2[:50],
        X_infer_category_2[50:]
    )
    assert_almost_equal(similarity_1v2, -46868.44557534719)
    assert_almost_equal(similarity_2v2, 29.917954937414834)
    def calc_error(truth_dict):
        model = plda.Model(truth_dict['data'], truth_dict['labels'])

        expected = truth_dict['Phi_w']
        predicted = np.matmul(model.A, model.A.T)

        error = calc_mean_squared_error(expected, predicted, as_log=True)

        return error
    def calc_error(truth_dict):
        model = plda.Model(truth_dict['data'], truth_dict['labels'])

        expected = truth_dict['prior_mean']
        predicted = model.m

        error = calc_mean_squared_error(expected, predicted, as_log=True)

        return error
    def calc_error(truth_dict):
        model = plda.Model(truth_dict['data'], truth_dict['labels'])

        dim = truth_dict['data'].shape[-1]
        Phi_b = truth_dict['Phi_b']

        expected = Phi_b
        predicted = np.matmul(model.A, model.Psi)
        predicted = np.matmul(predicted, model.A.T)

        error = calc_mean_squared_error(expected, predicted, as_log=True)

        return error
    def calc_error(truth_dict):
        model = plda.Model(truth_dict['data'], truth_dict['labels'])

        Phi_w = truth_dict['Phi_w']
        Phi_b = truth_dict['Phi_b']

        expected = Phi_b
        predicted = np.matmul(Phi_w, model.Psi)

        error = calc_mean_squared_error(expected, predicted, as_log=True)
        print(error)

        return error
    def calc_off_diagonal_error(truth_dict):
        model = plda.Model(truth_dict['data'], truth_dict['labels'])

        dim = truth_dict['data'].shape[-1]
        Phi_w = truth_dict['Phi_w']

        expected = np.zeros((dim, dim))
        predicted = np.matmul(model.inv_A, Phi_w)
        predicted = np.matmul(predicted, model.inv_A.T)
        predicted[range(dim), range(dim)] = 0

        error = calc_mean_squared_error(expected, predicted, as_log=True)

        return error
    def calc_diagonal_error(truth_dict):
        model = plda.Model(truth_dict['data'], truth_dict['labels'])

        dim = truth_dict['data'].shape[-1]
        Phi_w = truth_dict['Phi_w']

        expected = np.ones(dim)
        predicted = np.matmul(model.inv_A, Phi_w)
        predicted = np.matmul(predicted, model.inv_A.T)
        predicted = np.diag(predicted)

        error = calc_mean_squared_error(expected, predicted, as_log=True)

        return error
def test_pca(data_dict, model):
    # When data has a full rank covariance matrix.
    assert model.pca is None

    # When the data does NOT have a full rank covariance matrix.
    shape = data_dict['data'].shape

    data = np.zeros((shape[0], shape[1] + 10))
    data[:, :shape[1]] = data_dict['data']

    actual = plda.Model(data, data_dict['labels'])
    assert actual.pca is not None
    assert isinstance(actual.pca, PCA)

    assert actual.pca.n_features_ == data.shape[1]
    assert actual.pca.n_components == shape[1]
Exemple #10
0
    def calc_error(truth_dict):
        model = plda.Model(truth_dict['data'], truth_dict['labels'])

        expected = truth_dict['means']

        predicted = []
        for k, params in model.posterior_params.items():
            predicted.append(params['mean'])

        predicted = np.asarray(predicted)
        predicted = model.transform(predicted, from_space='U_model',
                                    to_space='D')

        error = calc_mean_squared_error(expected, predicted, as_log=True)

        return error
    def calc_error(truth_dict):
        model = plda.Model(truth_dict['data'], truth_dict['labels'])

        Phi_b = truth_dict['Phi_b']
        prior_mean = truth_dict['prior_mean']
        dim = prior_mean.shape[0]

        random_vectors = np.random.randint(-100, 100, (10, dim))
        expected = gaussian(prior_mean, Phi_b).logpdf(random_vectors)

        latent_vectors = model.transform(random_vectors, 'D', 'U_model')
        predicted = model.calc_logp_prior(latent_vectors)

        error = calc_mean_squared_error(expected, predicted, as_log=True)
        print(error)

        return error
def test_transform(data_dict, model):
    # When training data does have a full rank covariance matrix.
    # D to U_model.
    X = data_dict['data']

    expected = transform_D_to_X(X, model.pca)
    expected = transform_X_to_U(expected, model.inv_A, model.m)
    expected = transform_U_to_U_model(expected, model.relevant_U_dims)

    actual = model.transform(X, from_space='D', to_space='U_model')

    assert_allclose(actual, expected)

    # U_model to D.
    dim = model.get_dimensionality('U')
    expected = transform_U_model_to_U(actual, model.relevant_U_dims, dim)
    expected = transform_U_to_X(expected, model.A, model.m)
    expected = transform_X_to_D(expected, model.pca)

    actual = model.transform(actual, from_space='U_model', to_space='D')

    # When training data does not have a full rank covariance matrix.
    # D to U_model.
    shape = data_dict['data'].shape
    data = np.zeros((shape[0], shape[1] + 10))
    data[:, :shape[1]] = data_dict['data']

    tmp_model = plda.Model(data, data_dict['labels'])
    expected = transform_D_to_X(data, tmp_model.pca)
    expected = transform_X_to_U(expected, tmp_model.inv_A, tmp_model.m)
    expected = transform_U_to_U_model(expected, tmp_model.relevant_U_dims)

    actual = tmp_model.transform(data, from_space='D', to_space='U_model')
    assert_allclose(actual, expected)

    # U_model to D.
    dim = tmp_model.get_dimensionality('U')
    expected = transform_U_model_to_U(actual, tmp_model.relevant_U_dims, dim)
    expected = transform_U_to_X(expected, tmp_model.A, tmp_model.m)
    expected = transform_X_to_D(expected, tmp_model.pca)

    actual = model.transform(actual, from_space='U_model', to_space='D')
def test_get_dimensionality(data_dict, model):
    # When data has a full rank covariance matrix.
    dim = data_dict['data'].shape[1]
    K = len(data_dict['means'])

    assert model.get_dimensionality('D') == dim
    assert model.get_dimensionality('X') == dim
    assert model.get_dimensionality('U') == dim
    assert model.get_dimensionality('U_model') == K - 1

    # When the data does NOT have a full rank covariance matrix.
    shape = data_dict['data'].shape

    data = np.zeros((shape[0], shape[1] + 10))
    data[:, :shape[1]] = data_dict['data']

    actual = plda.Model(data, data_dict['labels'])

    assert actual.get_dimensionality('D') == data.shape[-1]
    assert actual.get_dimensionality('X') == dim
    assert actual.get_dimensionality('U') == dim
    assert actual.get_dimensionality('U_model') == K - 1
def test_calc_logp_mariginal_likelihood():
    np.random.seed(1234)

    n_k = 100
    K = 5
    dim = 10

    data_dictionary = generate_data(n_k, K, dim)
    X = data_dictionary['data']
    Y = data_dictionary['labels']
    model = plda.Model(X, Y)

    prior_mean = model.prior_params['mean']
    prior_cov_diag = model.prior_params['cov_diag']

    logpdf = gaussian(prior_mean, np.diag(prior_cov_diag + 1)).logpdf

    data = np.random.random((n_k, prior_mean.shape[-1]))
    expected_logps = logpdf(data)
    actual_logps = model.calc_logp_marginal_likelihood(data[:, None])

    assert_allclose(actual_logps, expected_logps)
def model(data_dict):
    return plda.Model(data_dict['data'], data_dict['labels'])