From a1fa15d36879b537240c0d24a6e7a607e1fe5a87 Mon Sep 17 00:00:00 2001 From: Wuwei Lin Date: Tue, 15 May 2018 15:57:26 +0800 Subject: [PATCH] Cleanup preprocessors --- .../preprocessor/DependenceMaximization.cpp | 13 -------- src/shogun/preprocessor/KernelPCA.cpp | 4 +-- src/shogun/preprocessor/PruneVarSubMean.cpp | 32 ++++++------------- src/shogun/preprocessor/SortUlongString.cpp | 15 ++++----- 4 files changed, 19 insertions(+), 45 deletions(-) diff --git a/src/shogun/preprocessor/DependenceMaximization.cpp b/src/shogun/preprocessor/DependenceMaximization.cpp index 6f692a3983d..75844ca464b 100644 --- a/src/shogun/preprocessor/DependenceMaximization.cpp +++ b/src/shogun/preprocessor/DependenceMaximization.cpp @@ -60,19 +60,6 @@ CDependenceMaximization::~CDependenceMaximization() SG_UNREF(m_labels_feats); } -void CDependenceMaximization::fit(CFeatures* features) -{ - REQUIRE(features, "Features are not initialized!\n"); - REQUIRE(features->get_feature_class()==C_DENSE || - features->get_feature_class()==C_SPARSE, - "Only allowed for dense/sparse features! Provided an instance of " - "%s which is of class %d!\n", - features->get_name(), features->get_feature_class()); - REQUIRE(features->get_feature_type()==F_DREAL, "Only allowed for " - "features of double type! Provided %d!\n", - features->get_feature_type()); -} - CFeatures* CDependenceMaximization::create_transformed_copy(CFeatures* features, index_t idx) { diff --git a/src/shogun/preprocessor/KernelPCA.cpp b/src/shogun/preprocessor/KernelPCA.cpp index 445c4e1148e..728603b9185 100644 --- a/src/shogun/preprocessor/KernelPCA.cpp +++ b/src/shogun/preprocessor/KernelPCA.cpp @@ -89,9 +89,9 @@ void CKernelPCA::fit(CFeatures* features) m_target_dim = n; } - SGVector bias_tmp = linalg::rowwise_sum(kernel_matrix); + auto bias_tmp = linalg::rowwise_sum(kernel_matrix); linalg::scale(bias_tmp, bias_tmp, -1.0 / n); - float64_t s = linalg::sum(bias_tmp) / n; + auto s = linalg::sum(bias_tmp) / n; linalg::add_scalar(bias_tmp, -s); linalg::center_matrix(kernel_matrix); diff --git a/src/shogun/preprocessor/PruneVarSubMean.cpp b/src/shogun/preprocessor/PruneVarSubMean.cpp index f56b525b5fd..524a5f0e9d0 100644 --- a/src/shogun/preprocessor/PruneVarSubMean.cpp +++ b/src/shogun/preprocessor/PruneVarSubMean.cpp @@ -5,11 +5,12 @@ * Sergey Lisitsyn, Bjoern Esser */ -#include -#include #include #include #include +#include +#include +#include using namespace shogun; @@ -35,33 +36,21 @@ void CPruneVarSubMean::fit(CFeatures* features) int32_t num_examples = simple_features->get_num_vectors(); int32_t num_features = simple_features->get_num_features(); - m_mean = SGVector(); m_idx = SGVector(); m_std = SGVector(); - m_mean.resize_vector(num_features); - float64_t* var = SG_MALLOC(float64_t, num_features); - int32_t i, j; - - memset(var, 0, num_features * sizeof(float64_t)); - m_mean.zero(); + SGVector var(num_features); auto feature_matrix = simple_features->get_feature_matrix(); // compute mean - for (i = 0; i < num_examples; i++) - { - for (j = 0; j < num_features; j++) - m_mean[j] += feature_matrix.matrix[i * num_features + j]; - } - - for (j = 0; j < num_features; j++) - m_mean[j] /= num_examples; + m_mean = linalg::rowwise_sum(feature_matrix); + linalg::scale(m_mean, m_mean, 1.0 / num_examples); // compute var - for (i = 0; i < num_examples; i++) + for (auto i : range(num_examples)) { - for (j = 0; j < num_features; j++) + for (auto j : range(num_features)) var[j] += CMath::sq( m_mean[j] - feature_matrix.matrix[i * num_features + j]); } @@ -69,7 +58,7 @@ void CPruneVarSubMean::fit(CFeatures* features) int32_t num_ok = 0; int32_t* idx_ok = SG_MALLOC(int32_t, num_features); - for (j = 0; j < num_features; j++) + for (auto j : range(num_features)) { var[j] /= num_examples; @@ -86,7 +75,7 @@ void CPruneVarSubMean::fit(CFeatures* features) SGVector new_mean(num_ok); m_std.resize_vector(num_ok); - for (j = 0; j < num_ok; j++) + for (auto j : range(num_ok)) { m_idx[j] = idx_ok[j]; new_mean[j] = m_mean[idx_ok[j]]; @@ -94,7 +83,6 @@ void CPruneVarSubMean::fit(CFeatures* features) } m_num_idx = num_ok; SG_FREE(idx_ok); - SG_FREE(var); m_mean = new_mean; m_initialized = true; diff --git a/src/shogun/preprocessor/SortUlongString.cpp b/src/shogun/preprocessor/SortUlongString.cpp index 2e261dc623a..55b1260cd22 100644 --- a/src/shogun/preprocessor/SortUlongString.cpp +++ b/src/shogun/preprocessor/SortUlongString.cpp @@ -4,10 +4,11 @@ * Authors: Soeren Sonnenburg */ -#include +#include #include #include #include +#include using namespace shogun; @@ -46,15 +47,14 @@ bool CSortUlongString::save(FILE* f) /// return pointer to feature_matrix, i.e. f->get_feature_matrix(); bool CSortUlongString::apply_to_string_features(CFeatures* f) { - int32_t i; auto sf = f->as>(); - int32_t num_vec = sf->get_num_vectors(); + auto num_vec = sf->get_num_vectors(); - for (i=0; iget_feature_vector(i, len, free_vec); + auto vec = sf->get_feature_vector(i, len, free_vec); ASSERT(!free_vec) // won't work with non-in-memory string features SG_DEBUG("sorting string of length %i\n", len) @@ -69,10 +69,9 @@ bool CSortUlongString::apply_to_string_features(CFeatures* f) uint64_t* CSortUlongString::apply_to_string(uint64_t* f, int32_t& len) { uint64_t* vec=SG_MALLOC(uint64_t, len); - int32_t i=0; - for (i=0; i