Cosan  1.0
Data Analytics Library
normalizer.h
Go to the documentation of this file.
1 #ifndef COSAN_NORMALIZER_H
2 #define COSAN_NORMALIZER_H
3 
5 #include <set>
6 namespace Cosan {
7  /**
8  *
9  * Scale input vectors individually to unit norm (vector length).
10  */
11  template<Numeric NumericType>
12  class Normalizer : public Preprocessor<NumericType> {
13  public:
15  p = 2;
16  this->fit(RD);
17  }
18  ~Normalizer() override = default;
20  if (plist.find(new_p)==plist.end()){
21  throw std::invalid_argument(
22  "Choose p from 1, 2 or std::numeric_limits<int>::max()!"
23  );
24  }
25  p = new_p;
26  this->fit(RD);
27  }
28 // CosanMatrix normalize(const CosanMatrix& X){
29 // return transform(X);
30 // }
31  int Getp() const {return p;}
33  void Setp(int new_p) {p=new_p;}
34  protected:
36  RD.UpdateData(transform(RD.GetInput()));
37  }
38  void fit(const CosanMatrix<NumericType> & X) override { }
39 
41  fmt::print("*********************************\n");
42  fmt::print("Begin normalizing data using norm {:d}!\n",p);
43 // SampleNorm = X.rowwise().template lpNorm<2>();
44  switch(p){
45  case 1:
46  SampleNorm = X.rowwise().template lpNorm<1>();
47  break;
48  case std::numeric_limits<int>::max():
49  SampleNorm = X.rowwise().template lpNorm<Eigen::Infinity>();
50  break;
51  default:
52  SampleNorm = X.rowwise().template lpNorm<2>();
53  }
54  bool _exist_zero = (SampleNorm.array()==0).any();
55  if (_exist_zero==true){
56  fmt::print("Caveat: some row has norm-p equals to zero!\n");
57  }
58  fmt::print("End of normalizing data using norm {:d} One may get norm of each row by GetSampleNorm().\n",p);
59  fmt::print("*********************************\n");
60  return (X.array().colwise())/((SampleNorm.array()==0).template cast<NumericType>()+SampleNorm.array());
61  }
62  private:
63  int p;
64  bool exist_zero;
66  std::set<int> plist = {1,2,std::numeric_limits<int>::max()};
67  };
68 
69 }
70 
71 #endif //COSAN_NORMALIZER_H
Cosan
Definition: CosanBO.h:29
Cosan::CosanRawData::GetInput
CosanMatrix< NumericType > GetInput()
Get a copy of CosanMatrix<NumericType> X.
Definition: CosanData.h:141
Cosan::Normalizer::Getp
int Getp() const
Definition: normalizer.h:31
Cosan::Normalizer::Setp
void Setp(int new_p)
Definition: normalizer.h:33
NumericType
double NumericType
Definition: onehotencodingTest.cpp:20
Cosan::Normalizer::fit
void fit(const CosanMatrix< NumericType > &X) override
Definition: normalizer.h:38
Cosan::Normalizer::GetSampleNorm
CosanColVector< NumericType > GetSampleNorm()
Definition: normalizer.h:32
Cosan::CosanRawData::UpdateData
void UpdateData(const CosanMatrix< NumericType > &inputX)
Update X using CosanMatrix<NumericType> input X.
Definition: CosanData.h:108
Cosan::Normalizer::p
int p
Definition: normalizer.h:63
Cosan::CosanMatrix
Eigen::Matrix< NumericType, Eigen::Dynamic, Eigen::Dynamic > CosanMatrix
Definition: CosanBO.h:37
Cosan::Normalizer
Definition: normalizer.h:12
Cosan::Normalizer::plist
std::set< int > plist
Definition: normalizer.h:66
Cosan::CosanRawData
Raw Data container.
Definition: CosanData.h:36
Cosan::Normalizer::exist_zero
bool exist_zero
Definition: normalizer.h:64
Cosan::Preprocessor
Definition: preprocessor.h:14
Cosan::CosanColVector
Eigen::Matrix< NumericType, Eigen::Dynamic, 1 > CosanColVector
Definition: CosanBO.h:44
Cosan::Normalizer::~Normalizer
~Normalizer() override=default
Cosan::Normalizer::transform
CosanMatrix< NumericType > transform(const CosanMatrix< NumericType > &X) override
Definition: normalizer.h:40
preprocessor.h
Cosan::Normalizer::Normalizer
Normalizer(CosanRawData< NumericType > &RD, int new_p)
Definition: normalizer.h:19
Cosan::Normalizer::SampleNorm
CosanColVector< NumericType > SampleNorm
Definition: normalizer.h:65
Cosan::Normalizer::Normalizer
Normalizer(CosanRawData< NumericType > &RD)
Definition: normalizer.h:14
Cosan::Normalizer::fit
void fit(CosanRawData< NumericType > &RD)
Definition: normalizer.h:35