[mlpack-svn] r10910 - mlpack/trunk/src/mlpack/methods/kernel_pca

fastlab-svn at coffeetalk-1.cc.gatech.edu fastlab-svn at coffeetalk-1.cc.gatech.edu
Tue Dec 20 12:36:04 EST 2011


Author: ajinkya
Date: 2011-12-20 12:36:03 -0500 (Tue, 20 Dec 2011)
New Revision: 10910

Modified:
   mlpack/trunk/src/mlpack/methods/kernel_pca/kernel_pca_impl.hpp
   mlpack/trunk/src/mlpack/methods/kernel_pca/kernel_pca_main.cpp
Log:


Modified: mlpack/trunk/src/mlpack/methods/kernel_pca/kernel_pca_impl.hpp
===================================================================
--- mlpack/trunk/src/mlpack/methods/kernel_pca/kernel_pca_impl.hpp	2011-12-20 17:07:13 UTC (rev 10909)
+++ mlpack/trunk/src/mlpack/methods/kernel_pca/kernel_pca_impl.hpp	2011-12-20 17:36:03 UTC (rev 10910)
@@ -1,25 +1,30 @@
 /**
- * @file kernel_pca_impl.hpp
+ * @file kernelpca_impl.hpp
  * @author Ajinkya Kale
  *
- * Implementation of KPCA class to perform Kernel Principal Components Analysis on the
- * specified data set.
+ * Implementation of KernelPCA class to perform Kernel Principal Components
+ * Analysis on the specified data set.
  */
-#include "kpca.hpp"
+#ifndef __MLPACK_METHODS_KERNEL_PCA_KERNEL_PCA_IMPL_HPP
+#define __MLPACK_METHODS_KERNEL_PCA_KERNEL_PCA_IMPL_HPP
+
+// In case it hasn't already been included.
+#include "kernel_pca.hpp"
+
 #include <iostream>
-#include <cmath>
 
-using namespace std;
+using namespace std; // This'll have to go before the release.
+
 namespace mlpack {
 namespace kpca {
 
 template <typename KernelType>
-KPCA<KernelType>::KPCA(const KernelType kernel,
+KernelPCA<KernelType>::KernelPCA(const KernelType kernel,
                        const bool centerData,
                        const bool scaleData) :
-      kernel_(kernel),
-      centerData_(centerData),
-      scaleData_(scaleData)
+      kernel(kernel),
+      centerData(centerData),
+      scaleData(scaleData)
 {
 }
 
@@ -27,23 +32,30 @@
  * Apply Kernel Principal Component Analysis to the provided data set.
  *
  * @param data - Data matrix
- * @param transformedData - Data with KPCA applied
+ * @param transformedData - Data with KernelPCA applied
  * @param eigVal - contains eigen values in a column vector
- * @param coeff - KPCA Loadings/Coeffs/EigenVectors
+ * @param coeff - KernelPCA Loadings/Coeffs/EigenVectors
  */
 template <typename KernelType>
-void KPCA<KernelType>::Apply(const arma::mat& data, arma::mat& transformedData,
-           arma::vec& eigVal, arma::mat& coeffs)
+void KernelPCA<KernelType>::Apply(const arma::mat& data,
+                                  arma::mat& transformedData,
+                                  arma::vec& eigVal,
+                                  arma::mat& coeffs)
 {
   arma::mat transData = trans(data);
 
-  if(centerData_)
+  if(centerData)
   {
     arma::rowvec means = arma::mean(transData, 0);
     transData = transData - arma::ones<arma::colvec>(transData.n_rows) * means;
   }
+  if (scaleData)
+  {
+    transData = transData / (arma::ones<arma::colvec>(transData.n_rows) *
+    stddev(transData, 0, 0));
+  }
   arma::mat centeredData = trans(transData);
-  arma::mat kernelMat = GetKernelMatrix(kernel_, centeredData);
+  arma::mat kernelMat = GetKernelMatrix(kernel, centeredData);
   arma::eig_sym(eigVal, coeffs, kernelMat);
 
   int n_eigVal = eigVal.n_elem;
@@ -61,16 +73,16 @@
  * Apply Kernel Principal Component Analysis to the provided data set.
  *
  * @param data - Data matrix
- * @param transformedData - Data with KPCA applied
+ * @param transformedData - Data with KernelPCA applied
  * @param eigVal - contains eigen values in a column vector
  */
 template <typename KernelType>
-void KPCA<KernelType>::Apply(const arma::mat& data, arma::mat& transformedData,
-           arma::vec& eigVal)
+void KernelPCA<KernelType>::Apply(const arma::mat& data,
+                                  arma::mat& transformedData,
+                                  arma::vec& eigVal)
 {
   arma::mat coeffs;
-  Apply(data, transformedData,
-              eigVal, coeffs);
+  Apply(data, transformedData, eigVal, coeffs);
 }
 
 /**
@@ -84,22 +96,17 @@
  * coeff/eigen vector matrix with only newDimension number of columns chosen.
  */
 template <typename KernelType>
-void KPCA<KernelType>::Apply(arma::mat& data, const int newDimension)
+void KernelPCA<KernelType>::Apply(arma::mat& data, const size_t newDimension)
 {
   arma::mat coeffs;
   arma::vec eigVal;
 
   Apply(data, data, eigVal, coeffs);
 
-  if(newDimension < coeffs.n_rows && newDimension > 0)
+  if (newDimension < coeffs.n_rows && newDimension > 0)
     data.shed_rows(newDimension, data.n_rows - 1);
 }
 
-/*template <typename KernelType>
-KPCA<KernelType>::~KPCA()
-{
-}*/
-
 }; // namespace mlpack
 }; // namespace kpca
 
@@ -117,5 +124,8 @@
       kernelMat(i, j) = kernel.Evaluate(v1, v2);
     }
   }
+
   return kernelMat;
 }
+
+#endif

Modified: mlpack/trunk/src/mlpack/methods/kernel_pca/kernel_pca_main.cpp
===================================================================
--- mlpack/trunk/src/mlpack/methods/kernel_pca/kernel_pca_main.cpp	2011-12-20 17:07:13 UTC (rev 10909)
+++ mlpack/trunk/src/mlpack/methods/kernel_pca/kernel_pca_main.cpp	2011-12-20 17:36:03 UTC (rev 10910)
@@ -17,12 +17,12 @@
 int main(int argc, char** argv)
 {
 
-  /*mat data("1 0 2 3 9;"
+  mat data("1 0 2 3 9;"
             "5 2 8 4 8;"
-            "6 7 3 1 8");*/
-  mat data("1 2 3;"
+            "6 7 3 1 8");
+/*  mat data("1 2 3;"
             "4 5 6;"
-            "7 8 9");
+            "7 8 9");*/
 
   data.print("DATA : ");
 




More information about the mlpack-svn mailing list