SHOGUN  v3.2.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
ManifoldSculpting.cpp
Go to the documentation of this file.
00001 /*
00002  * This program is free software; you can redistribute it and/or modify
00003  * it under the terms of the GNU General Public License as published by
00004  * the Free Software Foundation; either version 3 of the License, or
00005  * (at your option) any later version.
00006  *
00007  * Written (W) 2013 Vladyslav S. Gorbatiuk
00008  * Copyright (C) 2011-2013 Vladyslav S. Gorbatiuk
00009  */
00010 
00011 #include <shogun/converter/ManifoldSculpting.h>
00012 #ifdef HAVE_EIGEN3
00013 #include <shogun/lib/tapkee/tapkee_shogun.hpp>
00014 #include <shogun/features/DenseFeatures.h>
00015 #include <shogun/distance/EuclideanDistance.h>
00016 
00017 using namespace shogun;
00018 
00019 CManifoldSculpting::CManifoldSculpting() :
00020         CEmbeddingConverter()
00021 {
00022     // Default values
00023     m_k = 10;
00024     m_squishing_rate = 0.8;
00025     m_max_iteration = 80;
00026     init();
00027 }
00028 
00029 void CManifoldSculpting::init()
00030 {
00031     SG_ADD(&m_k, "k", "number of neighbors", MS_NOT_AVAILABLE);
00032     SG_ADD(&m_squishing_rate, "quishing_rate",
00033       "squishing rate",MS_NOT_AVAILABLE);
00034     SG_ADD(&m_max_iteration, "max_iteration",
00035       "maximum number of algorithm's iterations", MS_NOT_AVAILABLE);
00036 }
00037 
00038 CManifoldSculpting::~CManifoldSculpting()
00039 {
00040 }
00041 
00042 const char* CManifoldSculpting::get_name() const
00043 {
00044     return "ManifoldSculpting";
00045 }
00046 
00047 void CManifoldSculpting::set_k(const int32_t k)
00048 {
00049     ASSERT(k>0)
00050     m_k = k;
00051 }
00052 
00053 int32_t CManifoldSculpting::get_k() const
00054 {
00055     return m_k;
00056 }
00057 
00058 void CManifoldSculpting::set_squishing_rate(const float64_t squishing_rate)
00059 {
00060     ASSERT(squishing_rate >= 0 && squishing_rate < 1)
00061     m_squishing_rate = squishing_rate;
00062 }
00063 
00064 float64_t CManifoldSculpting::get_squishing_rate() const
00065 {
00066     return m_squishing_rate;
00067 }
00068 
00069 void CManifoldSculpting::set_max_iteration(const int32_t max_iteration)
00070 {
00071     ASSERT(max_iteration > 0)
00072     m_max_iteration = max_iteration;
00073 }
00074 
00075 int32_t CManifoldSculpting::get_max_iteration() const
00076 {
00077     return m_max_iteration;
00078 }
00079 
00080 CFeatures* CManifoldSculpting::apply(CFeatures* features)
00081 {
00082     CDenseFeatures<float64_t>* feats = (CDenseFeatures<float64_t>*)features;
00083     SG_REF(feats);
00084     CDistance* euclidean_distance =
00085     new CEuclideanDistance(feats, feats);
00086 
00087     TAPKEE_PARAMETERS_FOR_SHOGUN parameters;
00088     parameters.n_neighbors = m_k;
00089     parameters.squishing_rate = m_squishing_rate;
00090     parameters.max_iteration = m_max_iteration;
00091     parameters.features = feats;
00092     parameters.distance = euclidean_distance;
00093 
00094     parameters.method = SHOGUN_MANIFOLD_SCULPTING;
00095     parameters.target_dimension = m_target_dim;
00096     CDenseFeatures<float64_t>* embedding = tapkee_embed(parameters);
00097 
00098     SG_UNREF(euclidean_distance);
00099 
00100     return embedding;
00101 }
00102 
00103 #endif /* HAVE_EIGEN */
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

SHOGUN Machine Learning Toolbox - Documentation