37 #ifndef SHARK_ALGORITHMS_TRAINERS_NORMALIZECOMPONENTSZCA_H 38 #define SHARK_ALGORITHMS_TRAINERS_NORMALIZECOMPONENTSZCA_H 62 SHARK_CHECK(targetVariance > 0.0,
"[NormalizeComponentsZCA::NormalizeComponentsZCA] target variance must be positive");
63 m_targetVariance = targetVariance;
68 {
return "NormalizeComponentsZCA"; }
72 SHARK_CHECK(input.
numberOfElements() >= dc + 1,
"[NormalizeComponentsZCA::train] input needs to contain more points than there are input dimensions");
73 SHARK_CHECK(m_targetVariance > 0.0,
"[NormalizeComponentsZCA::train] target variance must be positive");
80 meanvar(input, mean, covariance);
82 RealMatrix eigenvectors;
83 RealVector eigenvalues;
84 eigensymm(covariance, eigenvectors, eigenvalues);
85 covariance=RealMatrix();
87 RealMatrix ZCAMatrix = eigenvectors;
88 for(std::size_t i=0; i<dc; i++) {
89 if(eigenvalues(i) > 0)
90 column(ZCAMatrix, i) /= std::sqrt(eigenvalues(i));
92 column(ZCAMatrix, i).clear();
94 ZCAMatrix =
prod(ZCAMatrix,
trans(eigenvectors));
95 ZCAMatrix *= std::sqrt(m_targetVariance);
97 RealVector offset = -
prod(ZCAMatrix,mean);