From d5a5d2b66f27ba47edeaead5220fd12a10b8bb12 Mon Sep 17 00:00:00 2001 From: Tiramisu 1993 Date: Wed, 19 Jul 2017 23:29:18 +0800 Subject: [PATCH] fix unit test of CQuadraticTimeMMD and TwoDistribut --- .../undocumented/libshogun/kernel_custom.cpp | 4 ++-- .../libshogun/kernel_custom_kernel.cpp | 4 ++-- src/shogun/machine/gp/EPInferenceMethod.cpp | 4 ++-- .../internals/mmd/CrossValidationMMD.h | 4 ++-- .../internals/mmd/PermutationMMD.h | 3 ++- src/shogun/structure/TwoStateModel.cpp | 3 ++- tests/unit/kernel/CustomKernel_unittest.cc | 3 ++- .../neuralnets/NeuralLinearLayer_unittest.cc | 2 +- .../KernelSelection_unittest.cc | 2 +- .../QuadraticTimeMMD_unittest.cc | 10 ++++---- .../TwoDistributionTest_unittest.cc | 20 ++++++++++++---- .../internals/CrossValidationMMD_unittest.cc | 2 -- .../internals/PermutationMMD_unittest.cc | 23 +++++++++++-------- 13 files changed, 49 insertions(+), 35 deletions(-) diff --git a/examples/undocumented/libshogun/kernel_custom.cpp b/examples/undocumented/libshogun/kernel_custom.cpp index 40a5f053bb7..f6b5526d14b 100644 --- a/examples/undocumented/libshogun/kernel_custom.cpp +++ b/examples/undocumented/libshogun/kernel_custom.cpp @@ -30,11 +30,11 @@ void test_custom_kernel_subsets() /* create a random permutation */ SGVector subset(m); - + auto prng = std::unique_ptr(new CRandom()); for (index_t run=0; run<100; ++run) { subset.range_fill(); - CMath::permute(subset); + CMath::permute(subset, prng.get()); // subset.display_vector("permutation"); features->add_subset(subset); k->init(features, features); diff --git a/examples/undocumented/libshogun/kernel_custom_kernel.cpp b/examples/undocumented/libshogun/kernel_custom_kernel.cpp index 31d6ba383cd..39625877d69 100644 --- a/examples/undocumented/libshogun/kernel_custom_kernel.cpp +++ b/examples/undocumented/libshogun/kernel_custom_kernel.cpp @@ -28,11 +28,11 @@ void test_custom_kernel_subsets() /* create a random permutation */ SGVector subset(m); - + auto prng = std::unique_ptr(new CRandom()); for (index_t run=0; run<100; ++run) { subset.range_fill(); - CMath::permute(subset); + CMath::permute(subset, prng.get()); // subset.display_vector("permutation"); features->add_subset(subset); k->init(features, features); diff --git a/src/shogun/machine/gp/EPInferenceMethod.cpp b/src/shogun/machine/gp/EPInferenceMethod.cpp index 5ee6ae0ca9c..e76a1b9ad3f 100644 --- a/src/shogun/machine/gp/EPInferenceMethod.cpp +++ b/src/shogun/machine/gp/EPInferenceMethod.cpp @@ -230,7 +230,7 @@ void CEPInferenceMethod::update() float64_t nlZ_old=CMath::INFTY; uint32_t sweep=0; - + auto prng = std::unique_ptr(new CRandom()); while ((CMath::abs(m_nlZ-nlZ_old)>m_tol && sweep(m_xy_inds.size()); m_inverted_permuted_inds.set_const(-1); - + auto prng = std::unique_ptr(new CRandom()); for (auto n=0; nadd_subset(m_permuted_inds); SGVector inds=m_stack->get_last_subset()->get_subset_idx(); diff --git a/src/shogun/statistical_testing/internals/mmd/PermutationMMD.h b/src/shogun/statistical_testing/internals/mmd/PermutationMMD.h index 2008dea1ca4..ad48ee32f61 100644 --- a/src/shogun/statistical_testing/internals/mmd/PermutationMMD.h +++ b/src/shogun/statistical_testing/internals/mmd/PermutationMMD.h @@ -200,10 +200,11 @@ struct PermutationMMD : ComputeMMD { ASSERT(m_num_null_samples>0); allocate_permutation_inds(); + auto prng = std::unique_ptr(new CRandom()); for (auto n=0; n signal(num_features, distort.vlen); distort.range_fill(); + auto prng = std::unique_ptr(new CRandom()); for ( int32_t i = 0 ; i < num_features ; ++i ) { lf = ll; - CMath::permute(distort); + CMath::permute(distort, prng.get()); for ( int32_t j = 0 ; j < d1.vlen ; ++j ) d1[j] = distort[j]; diff --git a/tests/unit/kernel/CustomKernel_unittest.cc b/tests/unit/kernel/CustomKernel_unittest.cc index 4af31eab711..15c31895c12 100644 --- a/tests/unit/kernel/CustomKernel_unittest.cc +++ b/tests/unit/kernel/CustomKernel_unittest.cc @@ -36,9 +36,10 @@ TEST(CustomKernelTest,add_row_subset) inds.range_fill(); index_t num_runs=10; + auto prng = std::unique_ptr(new CRandom()); for (index_t i=0; iadd_subset(inds); custom->add_row_subset(inds); diff --git a/tests/unit/neuralnets/NeuralLinearLayer_unittest.cc b/tests/unit/neuralnets/NeuralLinearLayer_unittest.cc index 0cba7ce7967..a3ca90f227a 100644 --- a/tests/unit/neuralnets/NeuralLinearLayer_unittest.cc +++ b/tests/unit/neuralnets/NeuralLinearLayer_unittest.cc @@ -168,7 +168,7 @@ TEST(NeuralLinearLayer, compute_error) error_ref += 0.5*CMath::pow(y[i]-A[i],2)/y.num_cols; // compare - EXPECT_NEAR(error_ref, error, 1e-11); + EXPECT_NEAR(error_ref, error, 1e-10); SG_UNREF(layers); } diff --git a/tests/unit/statistical_testing/KernelSelection_unittest.cc b/tests/unit/statistical_testing/KernelSelection_unittest.cc index b0123a44e43..8f3816fdfe6 100644 --- a/tests/unit/statistical_testing/KernelSelection_unittest.cc +++ b/tests/unit/statistical_testing/KernelSelection_unittest.cc @@ -320,7 +320,7 @@ TEST(KernelSelectionMaxCrossValidation, quadratic_time_single_kernel_dense) mmd->set_train_test_mode(false); auto selected_kernel=static_cast(mmd->get_kernel()); - EXPECT_NEAR(selected_kernel->get_width(), 0.0625, 1E-10); + EXPECT_NEAR(selected_kernel->get_width(), 0.03125, 1E-10); } TEST(KernelSelectionMaxCrossValidation, linear_time_single_kernel_dense) diff --git a/tests/unit/statistical_testing/QuadraticTimeMMD_unittest.cc b/tests/unit/statistical_testing/QuadraticTimeMMD_unittest.cc index 62a3eda9ad5..6f993881a06 100644 --- a/tests/unit/statistical_testing/QuadraticTimeMMD_unittest.cc +++ b/tests/unit/statistical_testing/QuadraticTimeMMD_unittest.cc @@ -354,7 +354,7 @@ TEST(QuadraticTimeMMD, perform_test_permutation_biased_full) // assert against local machine computed result mmd->set_statistic_type(ST_BIASED_FULL); float64_t p_value=mmd->compute_p_value(mmd->compute_statistic()); - EXPECT_NEAR(p_value, 0.0, 1E-10); + EXPECT_NEAR(p_value, 0.8, 1E-10); } TEST(QuadraticTimeMMD, perform_test_permutation_unbiased_full) @@ -393,7 +393,7 @@ TEST(QuadraticTimeMMD, perform_test_permutation_unbiased_full) // assert against local machine computed result mmd->set_statistic_type(ST_UNBIASED_FULL); float64_t p_value=mmd->compute_p_value(mmd->compute_statistic()); - EXPECT_NEAR(p_value, 0.0, 1E-10); + EXPECT_NEAR(p_value, 0.8, 1E-10); } TEST(QuadraticTimeMMD, perform_test_permutation_unbiased_incomplete) @@ -432,7 +432,7 @@ TEST(QuadraticTimeMMD, perform_test_permutation_unbiased_incomplete) // assert against local machine computed result mmd->set_statistic_type(ST_UNBIASED_INCOMPLETE); float64_t p_value=mmd->compute_p_value(mmd->compute_statistic()); - EXPECT_NEAR(p_value, 0.0, 1E-10); + EXPECT_NEAR(p_value, 0.6, 1E-10); } TEST(QuadraticTimeMMD, perform_test_spectrum) @@ -475,7 +475,7 @@ TEST(QuadraticTimeMMD, perform_test_spectrum) // assert against local machine computed result mmd->set_statistic_type(ST_BIASED_FULL); float64_t p_value_spectrum=mmd->compute_p_value(mmd->compute_statistic()); - EXPECT_NEAR(p_value_spectrum, 0.0, 1E-10); + EXPECT_NEAR(p_value_spectrum, 0.8, 1E-10); // unbiased case @@ -483,7 +483,7 @@ TEST(QuadraticTimeMMD, perform_test_spectrum) // assert against local machine computed result mmd->set_statistic_type(ST_UNBIASED_FULL); p_value_spectrum=mmd->compute_p_value(mmd->compute_statistic()); - EXPECT_NEAR(p_value_spectrum, 0.0, 1E-10); + EXPECT_NEAR(p_value_spectrum, 0.8, 1E-10); } TEST(QuadraticTimeMMD, precomputed_vs_nonprecomputed) diff --git a/tests/unit/statistical_testing/TwoDistributionTest_unittest.cc b/tests/unit/statistical_testing/TwoDistributionTest_unittest.cc index bf73bc2e389..2ea258c9cbc 100644 --- a/tests/unit/statistical_testing/TwoDistributionTest_unittest.cc +++ b/tests/unit/statistical_testing/TwoDistributionTest_unittest.cc @@ -130,23 +130,28 @@ TEST(TwoDistributionTest, compute_distance_streaming) const index_t n=10; const index_t dim=1; const float64_t difference=0.5; + set_global_seed(12345); auto gen_p=new CMeanShiftDataGenerator(0, dim, 0); auto gen_q=new CMeanShiftDataGenerator(difference, dim, 0); + auto gen_p1 = new CMeanShiftDataGenerator(0, dim, 0); + auto gen_q1 = new CMeanShiftDataGenerator(difference, dim, 0); + auto mock_obj=some(); mock_obj->set_p(gen_p); mock_obj->set_q(gen_q); mock_obj->set_num_samples_p(m); mock_obj->set_num_samples_q(n); - set_global_seed(12345); auto euclidean_distance=some(); auto distance=mock_obj->compute_distance(euclidean_distance); auto distance_mat1=distance->get_distance_matrix(); - auto feats_p=static_cast*>(gen_p->get_streamed_features(m)); - auto feats_q=static_cast*>(gen_q->get_streamed_features(n)); + auto feats_p = static_cast*>( + gen_p1->get_streamed_features(m)); + auto feats_q = static_cast*>( + gen_q1->get_streamed_features(n)); euclidean_distance->init(feats_p, feats_q); auto distance_mat2=euclidean_distance->get_distance_matrix(); @@ -168,6 +173,9 @@ TEST(TwoDistributionTest, compute_joint_distance_streaming) auto gen_p=new CMeanShiftDataGenerator(0, dim, 0); auto gen_q=new CMeanShiftDataGenerator(difference, dim, 0); + auto gen_p1 = new CMeanShiftDataGenerator(0, dim, 0); + auto gen_q1 = new CMeanShiftDataGenerator(difference, dim, 0); + auto mock_obj=some(); mock_obj->set_p(gen_p); mock_obj->set_q(gen_q); @@ -179,8 +187,10 @@ TEST(TwoDistributionTest, compute_joint_distance_streaming) auto distance=mock_obj->compute_joint_distance(euclidean_distance); auto distance_mat1=distance->get_distance_matrix(); - auto feats_p=static_cast*>(gen_p->get_streamed_features(m)); - auto feats_q=static_cast*>(gen_q->get_streamed_features(n)); + auto feats_p = static_cast*>( + gen_p1->get_streamed_features(m)); + auto feats_q = static_cast*>( + gen_q1->get_streamed_features(n)); SGMatrix data_p_and_q(dim, m+n); auto data_p=feats_p->get_feature_matrix(); diff --git a/tests/unit/statistical_testing/internals/CrossValidationMMD_unittest.cc b/tests/unit/statistical_testing/internals/CrossValidationMMD_unittest.cc index 6945116577e..8bc81354d28 100644 --- a/tests/unit/statistical_testing/internals/CrossValidationMMD_unittest.cc +++ b/tests/unit/statistical_testing/internals/CrossValidationMMD_unittest.cc @@ -283,8 +283,6 @@ TEST(CrossValidationMMD, unbiased_incomplete) cv.m_num_runs=num_runs; cv.m_rejections=SGMatrix(num_runs*num_folds, num_kernels); - set_global_seed(12345); - set_global_seed(12345); set_global_seed(12345); cv(kernel_mgr); kernel_mgr.unset_precomputed_distance(); diff --git a/tests/unit/statistical_testing/internals/PermutationMMD_unittest.cc b/tests/unit/statistical_testing/internals/PermutationMMD_unittest.cc index 160befe94ea..ddb8b205301 100644 --- a/tests/unit/statistical_testing/internals/PermutationMMD_unittest.cc +++ b/tests/unit/statistical_testing/internals/PermutationMMD_unittest.cc @@ -103,12 +103,13 @@ TEST(PermutationMMD, biased_full_single_kernel) Map map(kernel_matrix.matrix, kernel_matrix.num_rows, kernel_matrix.num_cols); SGVector result_2(num_null_samples); set_global_seed(12345); + auto prng = std::unique_ptr(new CRandom()); for (auto i=0; i perm(kernel_matrix.num_rows); perm.setIdentity(); SGVector perminds(perm.indices().data(), perm.indices().size(), false); - CMath::permute(perminds); + CMath::permute(perminds, prng.get()); MatrixXf permuted = perm.transpose()*map*perm; SGMatrix permuted_km(permuted.data(), permuted.rows(), permuted.cols(), false); result_2[i]=compute_mmd(permuted_km); @@ -116,11 +117,12 @@ TEST(PermutationMMD, biased_full_single_kernel) SGVector inds(kernel_matrix.num_rows); SGVector result_3(num_null_samples); - set_global_seed(12345); + + prng->set_seed(12345); for (auto i=0; iadd_subset(inds); kernel->init(feats, feats); kernel_matrix=kernel->get_kernel_matrix(); @@ -182,13 +184,13 @@ TEST(PermutationMMD, unbiased_full_single_kernel) set_global_seed(12345); Map map(kernel_matrix.matrix, kernel_matrix.num_rows, kernel_matrix.num_cols); SGVector result_2(num_null_samples); - + auto prng = std::unique_ptr(new CRandom()); for (auto i=0; i perm(kernel_matrix.num_rows); perm.setIdentity(); SGVector perminds(perm.indices().data(), perm.indices().size(), false); - CMath::permute(perminds); + CMath::permute(perminds, prng.get()); MatrixXf permuted = perm.transpose()*map*perm; SGMatrix permuted_km(permuted.data(), permuted.rows(), permuted.cols(), false); result_2[i]=compute_mmd(permuted_km); @@ -197,11 +199,11 @@ TEST(PermutationMMD, unbiased_full_single_kernel) SGVector inds(kernel_matrix.num_rows); SGVector result_3(num_null_samples); - set_global_seed(12345); + prng->set_seed(12345); for (auto i=0; iadd_subset(inds); kernel->init(feats, feats); kernel_matrix=kernel->get_kernel_matrix(); @@ -263,26 +265,27 @@ TEST(PermutationMMD, unbiased_incomplete_single_kernel) Map map(kernel_matrix.matrix, kernel_matrix.num_rows, kernel_matrix.num_cols); set_global_seed(12345); + auto prng = std::unique_ptr(new CRandom()); SGVector result_2(num_null_samples); for (auto i=0; i perm(kernel_matrix.num_rows); perm.setIdentity(); SGVector perminds(perm.indices().data(), perm.indices().size(), false); - CMath::permute(perminds); + CMath::permute(perminds, prng.get()); MatrixXf permuted = perm.transpose()*map*perm; SGMatrix permuted_km(permuted.data(), permuted.rows(), permuted.cols(), false); result_2[i]=compute_mmd(permuted_km); } - set_global_seed(12345); + prng->set_seed(12345); SGVector inds(kernel_matrix.num_rows); SGVector result_3(num_null_samples); for (auto i=0; iadd_subset(inds); kernel->init(feats, feats); kernel_matrix=kernel->get_kernel_matrix();