00001 00023 #ifndef __MLPACK_METHODS_KERNEL_PCA_KERNEL_PCA_HPP 00024 #define __MLPACK_METHODS_KERNEL_PCA_KERNEL_PCA_HPP 00025 00026 #include <mlpack/core.hpp> 00027 #include <mlpack/core/kernels/linear_kernel.hpp> 00028 00029 namespace mlpack { 00030 namespace kpca { 00031 00045 template <typename KernelType> 00046 class KernelPCA 00047 { 00048 public: 00057 KernelPCA(const KernelType kernel = KernelType(), 00058 const bool centerTransformedData = false); 00059 00068 void Apply(const arma::mat& data, 00069 arma::mat& transformedData, 00070 arma::vec& eigval, 00071 arma::mat& eigvec); 00072 00080 void Apply(const arma::mat& data, 00081 arma::mat& transformedData, 00082 arma::vec& eigval); 00083 00097 void Apply(arma::mat& data, const size_t newDimension); 00098 00100 const KernelType& Kernel() const { return kernel; } 00102 KernelType& Kernel() { return kernel; } 00103 00105 bool CenterTransformedData() const { return centerTransformedData; } 00107 bool& CenterTransformedData() { return centerTransformedData; } 00108 00109 private: 00111 KernelType kernel; 00114 bool centerTransformedData; 00115 00122 void GetKernelMatrix(const arma::mat& data, arma::mat& kernelMatrix); 00123 00124 }; // class KernelPCA 00125 00126 }; // namespace kpca 00127 }; // namespace mlpack 00128 00129 // Include implementation. 00130 #include "kernel_pca_impl.hpp" 00131 00132 #endif // __MLPACK_METHODS_KERNEL_PCA_KERNEL_PCA_HPP