[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