16 namespace tapkee_internal
19 template <
class RandomAccessIterator,
class FeatureVectorCallback>
21 RandomAccessIterator begin, RandomAccessIterator end,
22 FeatureVectorCallback callback,
IndexType dimension)
27 DenseVector current_vector_subtracted_mean(dimension);
29 DenseMatrix embedding = DenseMatrix::Zero((end-begin),projection_matrix.cols());
31 for (RandomAccessIterator iter=begin; iter!=end; ++iter)
33 callback.vector(*iter,current_vector);
34 current_vector_subtracted_mean = current_vector - mean_vector;
35 embedding.row(iter-begin) = projection_matrix.transpose()*current_vector_subtracted_mean;
41 template <
class RandomAccessIterator,
class FeatureVectorCallback>
43 FeatureVectorCallback callback,
IndexType dimension)
47 for (RandomAccessIterator iter=begin; iter!=end; ++iter)
49 callback.vector(*iter,current_vector);
50 mean += current_vector;
52 mean.array() /= (end-begin);
56 template <
class RandomAccessIterator,
class FeatureVectorCallback>
65 for (RandomAccessIterator iter=begin; iter!=end; ++iter)
67 callback.vector(*iter,current_vector);
68 covariance_matrix.selfadjointView<Eigen::Upper>().rankUpdate(current_vector,1.0);
70 covariance_matrix.selfadjointView<Eigen::Upper>().rankUpdate(mean,-1.0);
72 return covariance_matrix;
75 template <
class RandomAccessIterator,
class KernelCallback>
77 KernelCallback callback)
79 timed_context context(
"Constructing kPCA centered kernel matrix");
83 for (RandomAccessIterator i_iter=begin; i_iter!=end; ++i_iter)
85 for (RandomAccessIterator j_iter=i_iter; j_iter!=end; ++j_iter)
87 ScalarType k = callback.kernel(*i_iter,*j_iter);
88 kernel_matrix(i_iter-begin,j_iter-begin) = k;
89 kernel_matrix(j_iter-begin,i_iter-begin) = k;
void centerMatrix(DenseMatrix &matrix)
Eigen::Matrix< tapkee::ScalarType, Eigen::Dynamic, Eigen::Dynamic > DenseMatrix
dense matrix type (non-overridable)
DenseSymmetricMatrix compute_centered_kernel_matrix(RandomAccessIterator begin, RandomAccessIterator end, KernelCallback callback)
DenseSymmetricMatrix compute_covariance_matrix(RandomAccessIterator begin, RandomAccessIterator end, const DenseVector &mean, FeatureVectorCallback callback, IndexType dimension)
double ScalarType
default scalar value (can be overrided with TAPKEE_CUSTOM_INTERNAL_NUMTYPE define) ...
Eigen::Matrix< tapkee::ScalarType, Eigen::Dynamic, 1 > DenseVector
dense vector type (non-overridable)
int IndexType
indexing type (non-overridable) set to int for compatibility with OpenMP 2.0
DenseVector compute_mean(RandomAccessIterator begin, RandomAccessIterator end, FeatureVectorCallback callback, IndexType dimension)
DenseMatrix project(RandomAccessIterator begin, RandomAccessIterator end, FeatureVectorCallback callback, IndexType dimension, const IndexType max_iter, const ScalarType epsilon, const IndexType target_dimension, const DenseVector &mean_vector)
tapkee::DenseMatrix DenseSymmetricMatrix
dense symmetric matrix (non-overridable, currently just dense matrix, can be improved later) ...