From bce30238faf0bd5afb3cf9df9ab9d08076ad5bca Mon Sep 17 00:00:00 2001 From: Heiko Strathmann Date: Tue, 8 May 2018 11:39:17 +0200 Subject: [PATCH] more refactoring of API examples and required c++ adjustments (#4275) --- data | 2 +- examples/meta/src/base_api/put_get_add.sg | 8 ++++---- examples/meta/src/binary/averaged_perceptron.sg | 4 ++-- .../src/binary/linear_support_vector_machine.sg | 4 ++-- examples/meta/src/binary/perceptron.sg | 4 ++-- examples/meta/src/multiclass/ecoc_random.sg | 6 +++--- examples/meta/src/multiclass/linear.sg | 6 +++--- .../src/multiclass/linear_discriminant_analysis.sg | 4 ++-- examples/meta/src/multiclass/logistic_regression.sg | 4 ++-- .../multiclass/quadratic_discriminant_analysis.sg | 4 ++-- examples/meta/src/multiclass/shareboost.sg | 4 ++-- .../meta/src/regression/least_angle_regression.sg | 8 ++++---- examples/undocumented/libshogun/classifier_lda.cpp | 3 +-- src/gpl | 2 +- src/shogun/classifier/AveragedPerceptron.cpp | 3 +-- src/shogun/classifier/Perceptron.cpp | 3 +-- src/shogun/classifier/svm/LibLinear.cpp | 4 ++-- src/shogun/evaluation/MulticlassAccuracy.cpp | 13 +++++++------ src/shogun/machine/MulticlassMachine.cpp | 3 ++- src/shogun/multiclass/ShareBoost.cpp | 5 +++-- src/shogun/multiclass/ShareBoostOptimizer.cpp | 2 +- src/shogun/multiclass/tree/C45ClassifierTree.cpp | 4 +++- src/shogun/multiclass/tree/ID3ClassifierTree.cpp | 2 ++ src/shogun/regression/LeastAngleRegression.cpp | 5 +---- tests/unit/multiclass/MulticlassOCAS_unittest.cc | 1 + .../multiclass/tree/C45ClassifierTree_unittest.cc | 4 ++++ .../multiclass/tree/ID3ClassifierTree_unittest.cc | 3 +++ 27 files changed, 62 insertions(+), 53 deletions(-) diff --git a/data b/data index 56f6da41c92..5a95c8f445d 160000 --- a/data +++ b/data @@ -1 +1 @@ -Subproject commit 56f6da41c92ec82bc9461f53cacb9b614ca9d42a +Subproject commit 5a95c8f445d33c01da9f0dd8527cb70797690722 diff --git a/examples/meta/src/base_api/put_get_add.sg b/examples/meta/src/base_api/put_get_add.sg index ba9b9c70ef6..56e918db2cb 100644 --- a/examples/meta/src/base_api/put_get_add.sg +++ b/examples/meta/src/base_api/put_get_add.sg @@ -26,11 +26,11 @@ matrix[1,1] = 0.4 #RealMatrix matrix2 = feats.get_real_matrix("feature_matrix") #feats.put("feature_matrix", matrix2) -EuclideanDistance distance() -knn.put("distance", distance) +Distance dist = distance("EuclideanDistance") +knn.put("distance", dist) -SGObject distance2 = knn.get("distance") -knn.put("distance", distance2) +SGObject dist2 = knn.get("distance") +knn.put("distance", dist2) LibSVM svm() svm.put("kernel", k) diff --git a/examples/meta/src/binary/averaged_perceptron.sg b/examples/meta/src/binary/averaged_perceptron.sg index 1c03fce4a1e..490da80c2eb 100644 --- a/examples/meta/src/binary/averaged_perceptron.sg +++ b/examples/meta/src/binary/averaged_perceptron.sg @@ -6,8 +6,8 @@ CSVFile f_labels_test("../../data/classifier_binary_2d_linear_labels_test.dat") #![create_features] Features features_train = features(f_feats_train) Features features_test = features(f_feats_test) -BinaryLabels labels_train(f_labels_train) -BinaryLabels labels_test(f_labels_test) +Labels labels_train = labels(f_labels_train) +Labels labels_test = labels(f_labels_test) #![create_features] #![set_parameters] diff --git a/examples/meta/src/binary/linear_support_vector_machine.sg b/examples/meta/src/binary/linear_support_vector_machine.sg index b3b54106a7b..92749b4dbe4 100644 --- a/examples/meta/src/binary/linear_support_vector_machine.sg +++ b/examples/meta/src/binary/linear_support_vector_machine.sg @@ -6,8 +6,8 @@ CSVFile f_labels_test("../../data/classifier_binary_2d_linear_labels_test.dat") #![create_features] Features features_train = features(f_feats_train) Features features_test = features(f_feats_test) -BinaryLabels labels_train(f_labels_train) -BinaryLabels labels_test(f_labels_test) +Labels labels_train = labels(f_labels_train) +Labels labels_test = labels(f_labels_test) #![create_features] #![set_parameters] diff --git a/examples/meta/src/binary/perceptron.sg b/examples/meta/src/binary/perceptron.sg index 6dbd4af15e9..ca94901d651 100644 --- a/examples/meta/src/binary/perceptron.sg +++ b/examples/meta/src/binary/perceptron.sg @@ -6,8 +6,8 @@ CSVFile f_labels_test("../../data/classifier_binary_2d_linear_labels_test.dat") #![create_features] Features features_train = features(f_feats_train) Features features_test = features(f_feats_test) -BinaryLabels labels_train(f_labels_train) -BinaryLabels labels_test(f_labels_test) +Labels labels_train = labels(f_labels_train) +Labels labels_test = labels(f_labels_test) #![create_features] #![create_instance] diff --git a/examples/meta/src/multiclass/ecoc_random.sg b/examples/meta/src/multiclass/ecoc_random.sg index be552f5cae3..56a850726f7 100644 --- a/examples/meta/src/multiclass/ecoc_random.sg +++ b/examples/meta/src/multiclass/ecoc_random.sg @@ -8,12 +8,12 @@ CSVFile f_labels_test("../../data/classifier_4class_2d_linear_labels_test.dat") #![create_features] Features features_train = features(f_feats_train) Features features_test = features(f_feats_test) -MulticlassLabels labels_train(f_labels_train) -MulticlassLabels labels_test(f_labels_test) +Labels labels_train = labels(f_labels_train) +Labels labels_test = labels(f_labels_test) #![create_features] #![create_classifier] -LibLinear classifier() +Machine classifier = machine("LibLinear") #![create_classifier] #![choose_strategy] diff --git a/examples/meta/src/multiclass/linear.sg b/examples/meta/src/multiclass/linear.sg index 938c0cc9bad..2707ddd47d5 100644 --- a/examples/meta/src/multiclass/linear.sg +++ b/examples/meta/src/multiclass/linear.sg @@ -6,12 +6,12 @@ CSVFile f_labels_test("../../data/classifier_4class_2d_linear_labels_test.dat") #![create_features] Features features_train = features(f_feats_train) Features features_test = features(f_feats_test) -MulticlassLabels labels_train(f_labels_train) -MulticlassLabels labels_test(f_labels_test) +Labels labels_train = labels(f_labels_train) +Labels labels_test = labels(f_labels_test) #![create_features] #![create_classifier] -LibLinear classifier() +Machine classifier = machine("LibLinear") #![create_classifier] #![choose_strategy] diff --git a/examples/meta/src/multiclass/linear_discriminant_analysis.sg b/examples/meta/src/multiclass/linear_discriminant_analysis.sg index 4951173d3ce..f3addd77419 100644 --- a/examples/meta/src/multiclass/linear_discriminant_analysis.sg +++ b/examples/meta/src/multiclass/linear_discriminant_analysis.sg @@ -6,8 +6,8 @@ CSVFile f_labels_test("../../data/classifier_4class_2d_linear_labels_test.dat") #![create_features] Features features_train = features(f_feats_train) Features features_test = features(f_feats_test) -MulticlassLabels labels_train(f_labels_train) -MulticlassLabels labels_test(f_labels_test) +Labels labels_train = labels(f_labels_train) +Labels labels_test = labels(f_labels_test) #![create_features] #![create_instance] diff --git a/examples/meta/src/multiclass/logistic_regression.sg b/examples/meta/src/multiclass/logistic_regression.sg index 17259d064ce..2bcbeb26f6b 100644 --- a/examples/meta/src/multiclass/logistic_regression.sg +++ b/examples/meta/src/multiclass/logistic_regression.sg @@ -6,8 +6,8 @@ CSVFile f_labels_test("../../data/classifier_4class_2d_linear_labels_test.dat") #![create_features] Features features_train = features(f_feats_train) Features features_test = features(f_feats_test) -MulticlassLabels labels_train(f_labels_train) -MulticlassLabels labels_test(f_labels_test) +Labels labels_train = labels(f_labels_train) +Labels labels_test = labels(f_labels_test) #![create_features] diff --git a/examples/meta/src/multiclass/quadratic_discriminant_analysis.sg b/examples/meta/src/multiclass/quadratic_discriminant_analysis.sg index 2ee3e9d0ee3..491f35e94c0 100644 --- a/examples/meta/src/multiclass/quadratic_discriminant_analysis.sg +++ b/examples/meta/src/multiclass/quadratic_discriminant_analysis.sg @@ -6,8 +6,8 @@ CSVFile f_labels_test("../../data/classifier_4class_2d_linear_labels_test.dat") #![create_features] Features features_train = features(f_feats_train) Features features_test = features(f_feats_test) -MulticlassLabels labels_train(f_labels_train) -MulticlassLabels labels_test(f_labels_test) +Labels labels_train = labels(f_labels_train) +Labels labels_test = labels(f_labels_test) #![create_features] #![create_instance] diff --git a/examples/meta/src/multiclass/shareboost.sg b/examples/meta/src/multiclass/shareboost.sg index 45f7ed19c3d..f3bbb322ad0 100644 --- a/examples/meta/src/multiclass/shareboost.sg +++ b/examples/meta/src/multiclass/shareboost.sg @@ -6,8 +6,8 @@ CSVFile f_labels_test("../../data/classifier_4class_2d_linear_labels_test.dat") #![create_features] Features features_train = features(f_feats_train) Features features_test = features(f_feats_test) -MulticlassLabels labels_train(f_labels_train) -MulticlassLabels labels_test(f_labels_test) +Labels labels_train = labels(f_labels_train) +Labels labels_test = labels(f_labels_test) #![create_features] #![create_instance] diff --git a/examples/meta/src/regression/least_angle_regression.sg b/examples/meta/src/regression/least_angle_regression.sg index acf825c4197..afe96280f48 100644 --- a/examples/meta/src/regression/least_angle_regression.sg +++ b/examples/meta/src/regression/least_angle_regression.sg @@ -6,8 +6,8 @@ CSVFile f_labels_test("../../data/regression_1d_linear_labels_test.dat") #![create_features] Features features_train = features(f_feats_train) Features features_test = features(f_feats_test) -RegressionLabels labels_train(f_labels_train) -RegressionLabels labels_test(f_labels_test) +Labels labels_train = labels(f_labels_train) +Labels labels_test = labels(f_labels_test) #![create_features] #![preprocess_features] @@ -28,7 +28,7 @@ Machine lars = machine("LeastAngleRegression", labels=labels_train, lasso=False, #![train_and_apply] lars.train(features_train) -RegressionLabels labels_predict = lars.apply_regression(features_test) +Labels labels_predict = lars.apply(features_test) #[!extract_w] RealVector weights = lars.get_real_vector("w") @@ -40,5 +40,5 @@ real mse = eval.evaluate(labels_predict, labels_test) #![evaluate_error] # integration testing variables -RealVector output = labels_test.get_labels() +RealVector output = labels_predict.get_real_vector("labels") diff --git a/examples/undocumented/libshogun/classifier_lda.cpp b/examples/undocumented/libshogun/classifier_lda.cpp index bda9323165b..f04fb1bd2d6 100644 --- a/examples/undocumented/libshogun/classifier_lda.cpp +++ b/examples/undocumented/libshogun/classifier_lda.cpp @@ -44,12 +44,11 @@ void test() lda->train(); // Classify and display output - CMulticlassLabels* output=CLabelsFactory::to_multiclass(lda->apply()); + auto output = multiclass_labels(lda->apply()); SG_REF(output); SGVector::display_vector(output->get_labels().vector, output->get_num_labels()); // Free memory - SG_UNREF(output); SG_UNREF(lda); #endif } diff --git a/src/gpl b/src/gpl index 49f410171e5..8f342e3f6f8 160000 --- a/src/gpl +++ b/src/gpl @@ -1 +1 @@ -Subproject commit 49f410171e55c0c16239063cb4d7b1684eab6b59 +Subproject commit 8f342e3f6f8d30a4662a6289b62112a2d6087515 diff --git a/src/shogun/classifier/AveragedPerceptron.cpp b/src/shogun/classifier/AveragedPerceptron.cpp index d30f20b3c5d..2f4b5b60fee 100644 --- a/src/shogun/classifier/AveragedPerceptron.cpp +++ b/src/shogun/classifier/AveragedPerceptron.cpp @@ -43,7 +43,6 @@ void CAveragedPerceptron::init() bool CAveragedPerceptron::train_machine(CFeatures* data) { ASSERT(m_labels) - ASSERT(m_labels->get_label_type() == LT_BINARY) if (data) { @@ -54,7 +53,7 @@ bool CAveragedPerceptron::train_machine(CFeatures* data) ASSERT(features) bool converged=false; int32_t iter=0; - SGVector train_labels=((CBinaryLabels*) m_labels)->get_int_labels(); + SGVector train_labels = binary_labels(m_labels)->get_int_labels(); int32_t num_feat=features->get_dim_feature_space(); int32_t num_vec=features->get_num_vectors(); diff --git a/src/shogun/classifier/Perceptron.cpp b/src/shogun/classifier/Perceptron.cpp index 7eb0eb95041..5b8fd7b8297 100644 --- a/src/shogun/classifier/Perceptron.cpp +++ b/src/shogun/classifier/Perceptron.cpp @@ -47,7 +47,6 @@ CPerceptron::~CPerceptron() bool CPerceptron::train_machine(CFeatures* data) { ASSERT(m_labels) - ASSERT(m_labels->get_label_type() == LT_BINARY) if (data) { @@ -59,7 +58,7 @@ bool CPerceptron::train_machine(CFeatures* data) ASSERT(features) bool converged=false; int32_t iter=0; - SGVector train_labels=((CBinaryLabels*) m_labels)->get_int_labels(); + SGVector train_labels = binary_labels(m_labels)->get_int_labels(); int32_t num_feat=features->get_dim_feature_space(); int32_t num_vec=features->get_num_vectors(); diff --git a/src/shogun/classifier/svm/LibLinear.cpp b/src/shogun/classifier/svm/LibLinear.cpp index ab8419bdb51..0ccf93ae6ae 100644 --- a/src/shogun/classifier/svm/LibLinear.cpp +++ b/src/shogun/classifier/svm/LibLinear.cpp @@ -74,7 +74,6 @@ bool CLibLinear::train_machine(CFeatures* data) { ASSERT(m_labels) - ASSERT(m_labels->get_label_type() == LT_BINARY) init_linear_term(); if (data) @@ -142,9 +141,10 @@ bool CLibLinear::train_machine(CFeatures* data) double Cp = get_C1(); double Cn = get_C2(); + auto labels = binary_labels(m_labels); for (int32_t i = 0; i < prob.l; i++) { - prob.y[i] = ((CBinaryLabels*)m_labels)->get_int_label(i); + prob.y[i] = labels->get_int_label(i); if (prob.y[i] == +1) Cs[i] = get_C1(); else if (prob.y[i] == -1) diff --git a/src/shogun/evaluation/MulticlassAccuracy.cpp b/src/shogun/evaluation/MulticlassAccuracy.cpp index aa1a068dc42..57dbae68376 100644 --- a/src/shogun/evaluation/MulticlassAccuracy.cpp +++ b/src/shogun/evaluation/MulticlassAccuracy.cpp @@ -15,15 +15,16 @@ float64_t CMulticlassAccuracy::evaluate(CLabels* predicted, CLabels* ground_trut { ASSERT(predicted && ground_truth) ASSERT(predicted->get_num_labels() == ground_truth->get_num_labels()) - ASSERT(predicted->get_label_type() == LT_MULTICLASS) - ASSERT(ground_truth->get_label_type() == LT_MULTICLASS) int32_t length = predicted->get_num_labels(); + auto predicted_mc = multiclass_labels(predicted); + auto ground_truth_mc = multiclass_labels(ground_truth); int32_t correct = 0; if (m_ignore_rejects) { for (int32_t i=0; iget_int_label(i)==((CMulticlassLabels*) ground_truth)->get_int_label(i)) + if (predicted_mc->get_int_label(i) == + ground_truth_mc->get_int_label(i)) correct++; } return ((float64_t)correct)/length; @@ -33,11 +34,11 @@ float64_t CMulticlassAccuracy::evaluate(CLabels* predicted, CLabels* ground_trut int32_t total = length; for (int32_t i=0; iget_int_label(i); + int32_t predicted_label = predicted_mc->get_int_label(i); - if (predicted_label==((CMulticlassLabels*) predicted)->REJECTION_LABEL) + if (predicted_label == predicted_mc->REJECTION_LABEL) total--; - else if (predicted_label==((CMulticlassLabels*) ground_truth)->get_int_label(i)) + else if (predicted_label == ground_truth_mc->get_int_label(i)) correct++; } m_rejects_num = length-total; diff --git a/src/shogun/machine/MulticlassMachine.cpp b/src/shogun/machine/MulticlassMachine.cpp index 31a86d2adc0..2899ae36d1d 100644 --- a/src/shogun/machine/MulticlassMachine.cpp +++ b/src/shogun/machine/MulticlassMachine.cpp @@ -247,7 +247,8 @@ bool CMulticlassMachine::train_machine(CFeatures* data) SG_REF(train_labels); m_machine->set_labels(train_labels); - m_multiclass_strategy->train_start(CLabelsFactory::to_multiclass(m_labels), train_labels); + m_multiclass_strategy->train_start( + multiclass_labels(m_labels), train_labels); while (m_multiclass_strategy->train_has_more()) { SGVector subset=m_multiclass_strategy->train_prepare_next(); diff --git a/src/shogun/multiclass/ShareBoost.cpp b/src/shogun/multiclass/ShareBoost.cpp index af874b59b2a..95581e10869 100644 --- a/src/shogun/multiclass/ShareBoost.cpp +++ b/src/shogun/multiclass/ShareBoost.cpp @@ -139,7 +139,8 @@ void CShareBoost::compute_pred(const float64_t *W) void CShareBoost::compute_rho() { - CMulticlassLabels *lab = dynamic_cast(m_labels); + auto lab = multiclass_labels(m_labels); + for (int32_t i=0; i < m_rho.num_rows; ++i) { // i loop classes for (int32_t j=0; j < m_rho.num_cols; ++j) @@ -163,6 +164,7 @@ void CShareBoost::compute_rho() int32_t CShareBoost::choose_feature() { SGVector l1norm(m_fea.num_rows); + auto lab = multiclass_labels(m_labels); for (int32_t j=0; j < m_fea.num_rows; ++j) { if (std::find(&m_activeset[0], &m_activeset[m_activeset.vlen], j) != @@ -173,7 +175,6 @@ int32_t CShareBoost::choose_feature() else { l1norm[j] = 0; - CMulticlassLabels *lab = dynamic_cast(m_labels); for (int32_t k=0; k < m_multiclass_strategy->get_num_classes(); ++k) { float64_t abssum = 0; diff --git a/src/shogun/multiclass/ShareBoostOptimizer.cpp b/src/shogun/multiclass/ShareBoostOptimizer.cpp index 86d84e1ae73..e4215c155c2 100644 --- a/src/shogun/multiclass/ShareBoostOptimizer.cpp +++ b/src/shogun/multiclass/ShareBoostOptimizer.cpp @@ -51,7 +51,7 @@ float64_t ShareBoostOptimizer::lbfgs_evaluate(void *userdata, const float64_t *W int32_t k = optimizer->m_sb->m_multiclass_strategy->get_num_classes(); SGMatrix fea = optimizer->m_sb->m_fea; - CMulticlassLabels *lab = dynamic_cast(optimizer->m_sb->m_labels); + auto lab = multiclass_labels(optimizer->m_sb->m_labels); // compute gradient for (int32_t i=0; i < m; ++i) diff --git a/src/shogun/multiclass/tree/C45ClassifierTree.cpp b/src/shogun/multiclass/tree/C45ClassifierTree.cpp index 75965bbaffa..d4354c15686 100644 --- a/src/shogun/multiclass/tree/C45ClassifierTree.cpp +++ b/src/shogun/multiclass/tree/C45ClassifierTree.cpp @@ -530,14 +530,16 @@ void CC45ClassifierTree::prune_tree_from_current_node(CDenseFeatures* SG_UNREF(right_child); } - SG_UNREF(children); + SG_UNREF(children) CMulticlassLabels* predicted_unpruned=apply_multiclass_from_current_node(feats, current); + SG_REF(predicted_unpruned); SGVector pruned_labels=SGVector(feature_matrix.num_cols); for (int32_t i=0; idata.class_label; CMulticlassLabels* predicted_pruned=new CMulticlassLabels(pruned_labels); + SG_REF(predicted_pruned); CMulticlassAccuracy* accuracy=new CMulticlassAccuracy(); float64_t unpruned_accuracy=accuracy->evaluate(predicted_unpruned, gnd_truth); diff --git a/src/shogun/multiclass/tree/ID3ClassifierTree.cpp b/src/shogun/multiclass/tree/ID3ClassifierTree.cpp index d5e9a95227c..07741cfb2a4 100644 --- a/src/shogun/multiclass/tree/ID3ClassifierTree.cpp +++ b/src/shogun/multiclass/tree/ID3ClassifierTree.cpp @@ -335,11 +335,13 @@ void CID3ClassifierTree::prune_tree_machine(CDenseFeatures* feats, SG_UNREF(children); CMulticlassLabels* predicted_unpruned = apply_multiclass_from_current_node(feats, current); + SG_REF(predicted_unpruned); SGVector pruned_labels = SGVector(feature_matrix.num_cols); for (int32_t i=0; idata.class_label; CMulticlassLabels* predicted_pruned = new CMulticlassLabels(pruned_labels); + SG_REF(predicted_pruned); CMulticlassAccuracy* accuracy = new CMulticlassAccuracy(); float64_t unpruned_accuracy = accuracy->evaluate(predicted_unpruned, gnd_truth); diff --git a/src/shogun/regression/LeastAngleRegression.cpp b/src/shogun/regression/LeastAngleRegression.cpp index e06eb21aec9..d3eea1cc6ab 100644 --- a/src/shogun/regression/LeastAngleRegression.cpp +++ b/src/shogun/regression/LeastAngleRegression.cpp @@ -104,9 +104,6 @@ void CLeastAngleRegression::plane_rot(ST x0, ST x1, bool CLeastAngleRegression::train_machine(CFeatures* data) { - REQUIRE(m_labels->get_label_type() == LT_REGRESSION, "Provided labels (%s) are of type (%d) - they should be regression labels (%d) instead.\n" - , m_labels->get_name(), m_labels->get_label_type(), LT_REGRESSION, m_labels->get_label_type()) - if (!data) { REQUIRE(features, "No features provided.\n") @@ -155,7 +152,7 @@ bool CLeastAngleRegression::train_machine_templated(CDenseFeatures * data) m_is_active.resize(n_fea); fill(m_is_active.begin(), m_is_active.end(), false); - SGVector y = ((CRegressionLabels*) m_labels)->template get_labels_t(); + SGVector y = regression_labels(m_labels)->template get_labels_t(); typename SGVector::EigenVectorXtMap map_y(y.vector, y.size()); // transpose(X) is more convenient to work with since we care diff --git a/tests/unit/multiclass/MulticlassOCAS_unittest.cc b/tests/unit/multiclass/MulticlassOCAS_unittest.cc index 0075aa8fcc3..45e9f50119b 100644 --- a/tests/unit/multiclass/MulticlassOCAS_unittest.cc +++ b/tests/unit/multiclass/MulticlassOCAS_unittest.cc @@ -28,6 +28,7 @@ TEST(MulticlassOCASTest,train) mocas->train(); CMulticlassLabels* pred = (CMulticlassLabels*)mocas->apply(test_feats); + SG_REF(pred); CMulticlassAccuracy evaluate = CMulticlassAccuracy(); float64_t result = evaluate.evaluate(pred, ground_truth); EXPECT_GT(result, 0.99); diff --git a/tests/unit/multiclass/tree/C45ClassifierTree_unittest.cc b/tests/unit/multiclass/tree/C45ClassifierTree_unittest.cc index 48d136e9af8..da5fad5b263 100644 --- a/tests/unit/multiclass/tree/C45ClassifierTree_unittest.cc +++ b/tests/unit/multiclass/tree/C45ClassifierTree_unittest.cc @@ -496,6 +496,8 @@ TEST(C45ClassifierTree, tree_prune_categorical_attributes) CDenseFeatures* train_features=new CDenseFeatures(data); CMulticlassLabels* train_lab=new CMulticlassLabels(train_labels); CMulticlassLabels* validation_lab=new CMulticlassLabels(validation_labels); + SG_REF(train_lab); + SG_REF(validation_lab); CC45ClassifierTree* c45tree=new CC45ClassifierTree(); c45tree->set_labels(train_lab); @@ -581,8 +583,10 @@ TEST(C45ClassifierTree, tree_prune_continuous_attributes) CDenseFeatures* train_features=new CDenseFeatures(data); CMulticlassLabels* train_lab=new CMulticlassLabels(train_labels); + SG_REF(train_lab); CDenseFeatures* validation_features=new CDenseFeatures(validation_data); CMulticlassLabels* validation_lab=new CMulticlassLabels(validation_labels); + SG_REF(validation_lab); CC45ClassifierTree* c45tree=new CC45ClassifierTree(); c45tree->set_labels(train_lab); diff --git a/tests/unit/multiclass/tree/ID3ClassifierTree_unittest.cc b/tests/unit/multiclass/tree/ID3ClassifierTree_unittest.cc index 41630d67f32..b62963469e1 100644 --- a/tests/unit/multiclass/tree/ID3ClassifierTree_unittest.cc +++ b/tests/unit/multiclass/tree/ID3ClassifierTree_unittest.cc @@ -278,6 +278,8 @@ TEST(ID3ClassifierTree, tree_prune) CDenseFeatures* train_features=new CDenseFeatures(data); CMulticlassLabels* train_lab=new CMulticlassLabels(train_labels); CMulticlassLabels* validation_lab=new CMulticlassLabels(validation_labels); + SG_REF(train_lab); + SG_REF(validation_lab); CID3ClassifierTree* id3tree=new CID3ClassifierTree(); id3tree->set_labels(train_lab); @@ -304,6 +306,7 @@ TEST(ID3ClassifierTree, tree_prune) EXPECT_EQ(1.0,res_vector[14]); EXPECT_EQ(1.0,res_vector[15]); + SG_UNREF(train_lab); SG_UNREF(train_features); SG_UNREF(validation_lab); SG_UNREF(result);