diff --git a/bob/bio/base/algorithm/PLDA.py b/bob/bio/base/algorithm/PLDA.py index a561f43dc2d34dd91d5f95d0c50833383d780d43..21f29753ccede4abb2fc267d3333df4ccd4d3362 100644 --- a/bob/bio/base/algorithm/PLDA.py +++ b/bob/bio/base/algorithm/PLDA.py @@ -77,8 +77,18 @@ class PLDA (Algorithm): logger.info(" -> Training LinearMachine using PCA ") trainer = bob.learn.linear.PCATrainer() - machine, _ = trainer.train(data) + machine, eigen_values = trainer.train(data) + + if isinstance(self.subspace_dimension_pca, float): + cummulated = numpy.cumsum(eigen_values) / numpy.sum(eigen_values) + for index in range(len(cummulated)): + if cummulated[index] > self.subspace_dimension_pca: + self.subspace_dimension_pca = index + break + self.subspace_dimension_pca = index + # limit number of pcs + logger.info(" -> limiting PCA subspace to %d dimensions", self.subspace_dimension_pca) machine.resize(machine.shape[0], self.subspace_dimension_pca) return machine diff --git a/bob/bio/base/config/algorithm/pca_plda.py b/bob/bio/base/config/algorithm/pca_plda.py index 2ff3a8e61f384b2af0020bfe52268d0d6d5b08ed..9166e073361dd3c77f2bd874139ddedb40a702c6 100644 --- a/bob/bio/base/config/algorithm/pca_plda.py +++ b/bob/bio/base/config/algorithm/pca_plda.py @@ -5,5 +5,5 @@ import bob.bio.base algorithm = bob.bio.base.algorithm.PLDA( subspace_dimension_of_f = 16, # Size of subspace F subspace_dimension_of_g = 16, # Size of subspace G - subspace_dimension_pca = 150 # Size of the PCA subspace + subspace_dimension_pca = 0.9 # Percentage of PCA variance )