-
-
Notifications
You must be signed in to change notification settings - Fork 1k
/
PruneVarSubMean.h
79 lines (64 loc) · 1.94 KB
/
PruneVarSubMean.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/*
* This software is distributed under BSD 3-clause license (see LICENSE file).
*
* Authors: Soeren Sonnenburg, Evgeniy Andreev, Yuyu Zhang, Viktor Gal,
* Sergey Lisitsyn, Saurabh Goyal
*/
#ifndef _CPRUNE_VAR_SUB_MEAN__H__
#define _CPRUNE_VAR_SUB_MEAN__H__
#include <shogun/lib/config.h>
#include <shogun/preprocessor/DensePreprocessor.h>
#include <shogun/features/Features.h>
#include <shogun/lib/common.h>
namespace shogun
{
/** @brief Preprocessor PruneVarSubMean will substract the mean and remove
* features that have zero variance.
*
* It will optionally normalize standard deviation of
* features to 1 (by dividing by standard deviation of the feature)
*/
class CPruneVarSubMean : public CDensePreprocessor<float64_t>
{
public:
/** constructor
*
* @param divide if division shall be made
*/
CPruneVarSubMean(bool divide=true);
/** destructor */
virtual ~CPruneVarSubMean();
/// Fit preprocessor into features
virtual void fit(CFeatures* features);
/// cleanup
virtual void cleanup();
/// apply preproc on feature matrix
/// result in feature matrix
/// return pointer to feature_matrix, i.e. f->get_feature_matrix();
virtual SGMatrix<float64_t> apply_to_feature_matrix(CFeatures* features);
/// apply preproc on single feature vector
/// result in feature matrix
virtual SGVector<float64_t> apply_to_feature_vector(SGVector<float64_t> vector);
/** @return object name */
virtual const char* get_name() const { return "PruneVarSubMean"; }
/// return a type of preprocessor
virtual EPreprocessorType get_type() const { return P_PRUNEVARSUBMEAN; }
private:
void init();
void register_parameters();
protected:
/** idx */
SGVector<int32_t> m_idx;
/** mean */
SGVector<float64_t> m_mean;
/** std */
SGVector<float64_t> m_std;
/** num idx */
int32_t m_num_idx;
/** divide by std */
bool m_divide_by_std;
/// true when already initialized
bool m_initialized;
};
}
#endif