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) 2012 Sergey Lisitsyn 00008 * Copyright (C) 2012 Sergey Lisitsyn 00009 */ 00010 00011 #include <shogun/ui/GUIConverter.h> 00012 #include <shogun/ui/SGInterface.h> 00013 00014 #include <shogun/lib/config.h> 00015 #include <shogun/io/SGIO.h> 00016 #include <shogun/features/DenseFeatures.h> 00017 #include <shogun/kernel/GaussianKernel.h> 00018 00019 #include <shogun/converter/LocallyLinearEmbedding.h> 00020 #include <shogun/converter/HessianLocallyLinearEmbedding.h> 00021 #include <shogun/converter/LocalTangentSpaceAlignment.h> 00022 #include <shogun/converter/NeighborhoodPreservingEmbedding.h> 00023 #include <shogun/converter/LaplacianEigenmaps.h> 00024 #include <shogun/converter/LocalityPreservingProjections.h> 00025 #include <shogun/converter/DiffusionMaps.h> 00026 #include <shogun/converter/LinearLocalTangentSpaceAlignment.h> 00027 #include <shogun/converter/MultidimensionalScaling.h> 00028 #include <shogun/converter/Isomap.h> 00029 #include <shogun/converter/EmbeddingConverter.h> 00030 00031 using namespace shogun; 00032 00033 CGUIConverter::CGUIConverter(CSGInterface* ui) 00034 : CSGObject(), m_ui(ui) 00035 { 00036 m_converter = NULL; 00037 } 00038 00039 CGUIConverter::~CGUIConverter() 00040 { 00041 SG_UNREF(m_converter); 00042 } 00043 00044 bool CGUIConverter::create_locallylinearembedding(int32_t k) 00045 { 00046 #ifdef HAVE_LAPACK 00047 m_converter = new CLocallyLinearEmbedding(); 00048 ((CLocallyLinearEmbedding*)m_converter)->set_k(k); 00049 #else 00050 SG_ERROR("Requires Lapack to be enabled at compile time\n"); 00051 #endif 00052 return true; 00053 } 00054 00055 bool CGUIConverter::create_neighborhoodpreservingembedding(int32_t k) 00056 { 00057 #ifdef HAVE_LAPACK 00058 m_converter = new CNeighborhoodPreservingEmbedding(); 00059 ((CNeighborhoodPreservingEmbedding*)m_converter)->set_k(k); 00060 #else 00061 SG_ERROR("Requires Lapack to be enabled at compile time\n"); 00062 #endif 00063 return true; 00064 } 00065 00066 bool CGUIConverter::create_localtangentspacealignment(int32_t k) 00067 { 00068 #ifdef HAVE_LAPACK 00069 m_converter = new CLocalTangentSpaceAlignment(); 00070 ((CLocalTangentSpaceAlignment*)m_converter)->set_k(k); 00071 #else 00072 SG_ERROR("Requires Lapack to be enabled at compile time\n"); 00073 #endif 00074 return true; 00075 } 00076 00077 bool CGUIConverter::create_linearlocaltangentspacealignment(int32_t k) 00078 { 00079 #ifdef HAVE_LAPACK 00080 m_converter = new CLinearLocalTangentSpaceAlignment(); 00081 ((CLinearLocalTangentSpaceAlignment*)m_converter)->set_k(k); 00082 #else 00083 SG_ERROR("Requires Lapack to be enabled at compile time\n"); 00084 #endif 00085 return true; 00086 } 00087 00088 bool CGUIConverter::create_hessianlocallylinearembedding(int32_t k) 00089 { 00090 #ifdef HAVE_LAPACK 00091 m_converter = new CLocallyLinearEmbedding(); 00092 ((CHessianLocallyLinearEmbedding*)m_converter)->set_k(k); 00093 #else 00094 SG_ERROR("Requires Lapack to be enabled at compile time\n"); 00095 #endif 00096 return true; 00097 } 00098 00099 bool CGUIConverter::create_laplacianeigenmaps(int32_t k, float64_t width) 00100 { 00101 #ifdef HAVE_LAPACK 00102 m_converter = new CLaplacianEigenmaps(); 00103 ((CLaplacianEigenmaps*)m_converter)->set_k(k); 00104 ((CLaplacianEigenmaps*)m_converter)->set_tau(width); 00105 #else 00106 SG_ERROR("Requires Lapack to be enabled at compile time\n"); 00107 #endif 00108 return true; 00109 } 00110 00111 bool CGUIConverter::create_localitypreservingprojections(int32_t k, float64_t width) 00112 { 00113 #ifdef HAVE_LAPACK 00114 m_converter = new CLocalityPreservingProjections(); 00115 ((CLocalityPreservingProjections*)m_converter)->set_k(k); 00116 ((CLocalityPreservingProjections*)m_converter)->set_tau(width); 00117 #else 00118 SG_ERROR("Requires Lapack to be enabled at compile time\n"); 00119 #endif 00120 return true; 00121 } 00122 00123 bool CGUIConverter::create_diffusionmaps(int32_t t, float64_t width) 00124 { 00125 #ifdef HAVE_LAPACK 00126 m_converter = new CDiffusionMaps(); 00127 ((CDiffusionMaps*)m_converter)->set_t(t); 00128 ((CDiffusionMaps*)m_converter)->set_kernel(new CGaussianKernel(100,width)); 00129 #else 00130 SG_ERROR("Requires Lapack to be enabled at compile time\n"); 00131 #endif 00132 return true; 00133 } 00134 00135 bool CGUIConverter::create_isomap(int32_t k) 00136 { 00137 #ifdef HAVE_LAPACK 00138 m_converter = new CIsomap(); 00139 ((CIsomap*)m_converter)->set_k(k); 00140 #else 00141 SG_ERROR("Requires Lapack to be enabled at compile time\n"); 00142 #endif 00143 return true; 00144 } 00145 00146 bool CGUIConverter::create_multidimensionalscaling() 00147 { 00148 #ifdef HAVE_LAPACK 00149 m_converter = new CMultidimensionalScaling(); 00150 #else 00151 SG_ERROR("Requires Lapack to be enabled at compile time\n"); 00152 #endif 00153 return true; 00154 } 00155 00156 CDenseFeatures<float64_t>* CGUIConverter::embed(int32_t target_dim) 00157 { 00158 if (!m_converter) 00159 SG_ERROR("No converter created"); 00160 ((CEmbeddingConverter*)m_converter)->set_target_dim(target_dim); 00161 return ((CEmbeddingConverter*)m_converter)->embed(m_ui->ui_features->get_train_features()); 00162 } 00163