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) 2011 Sergey Lisitsyn 00008 * Copyright (C) 2011 Sergey Lisitsyn 00009 */ 00010 00011 #include <shogun/converter/EmbeddingConverter.h> 00012 #include <shogun/kernel/LinearKernel.h> 00013 #include <shogun/distance/EuclideanDistance.h> 00014 00015 using namespace shogun; 00016 00017 namespace shogun 00018 { 00019 CEmbeddingConverter::CEmbeddingConverter() 00020 : CConverter() 00021 { 00022 m_target_dim = 1; 00023 m_distance = new CEuclideanDistance(); 00024 m_kernel = new CLinearKernel(); 00025 00026 init(); 00027 } 00028 00029 CEmbeddingConverter::~CEmbeddingConverter() 00030 { 00031 SG_UNREF(m_distance); 00032 SG_UNREF(m_kernel); 00033 } 00034 00035 CDenseFeatures<float64_t>* CEmbeddingConverter::embed(CFeatures* features) 00036 { 00037 return (CDenseFeatures<float64_t>*)apply(features); 00038 } 00039 00040 void CEmbeddingConverter::set_target_dim(int32_t dim) 00041 { 00042 ASSERT(dim>0); 00043 m_target_dim = dim; 00044 } 00045 00046 int32_t CEmbeddingConverter::get_target_dim() const 00047 { 00048 return m_target_dim; 00049 } 00050 00051 void CEmbeddingConverter::set_distance(CDistance* distance) 00052 { 00053 SG_UNREF(m_distance); 00054 SG_REF(distance); 00055 m_distance = distance; 00056 } 00057 00058 CDistance* CEmbeddingConverter::get_distance() const 00059 { 00060 SG_REF(m_distance); 00061 return m_distance; 00062 } 00063 00064 void CEmbeddingConverter::set_kernel(CKernel* kernel) 00065 { 00066 SG_UNREF(m_kernel); 00067 SG_REF(kernel); 00068 m_kernel = kernel; 00069 } 00070 00071 CKernel* CEmbeddingConverter::get_kernel() const 00072 { 00073 SG_REF(m_kernel); 00074 return m_kernel; 00075 } 00076 00077 void CEmbeddingConverter::init() 00078 { 00079 SG_ADD(&m_target_dim, "target_dim", 00080 "target dimensionality of preprocessor", MS_AVAILABLE); 00081 SG_ADD((CSGObject**)&m_distance, "distance", 00082 "distance to be used for embedding", MS_AVAILABLE); 00083 SG_ADD((CSGObject**)&m_kernel, "kernel", "kernel to be used for embedding", 00084 MS_AVAILABLE); 00085 } 00086 }