00001 #ifndef _SVMSGD_H___ 00002 #define _SVMSGD_H___ 00003 00004 /* 00005 SVM with stochastic gradient 00006 Copyright (C) 2007- Leon Bottou 00007 00008 This program is free software; you can redistribute it and/or 00009 modify it under the terms of the GNU Lesser General Public 00010 License as published by the Free Software Foundation; either 00011 version 2.1 of the License, or (at your option) any later version. 00012 00013 This program is distributed in the hope that it will be useful, 00014 but WITHOUT ANY WARRANTY; without even the implied warranty of 00015 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00016 GNU General Public License for more details. 00017 00018 You should have received a copy of the GNU General Public License 00019 along with this program; if not, write to the Free Software 00020 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA 00021 00022 Shogun adjustments (w) 2008 Soeren Sonnenburg 00023 */ 00024 00025 #include "lib/common.h" 00026 #include "classifier/LinearClassifier.h" 00027 #include "features/DotFeatures.h" 00028 #include "features/Labels.h" 00029 00030 namespace shogun 00031 { 00033 class CSVMSGD : public CLinearClassifier 00034 { 00035 public: 00040 CSVMSGD(float64_t C); 00041 00048 CSVMSGD( 00049 float64_t C, CDotFeatures* traindat, 00050 CLabels* trainlab); 00051 00052 virtual ~CSVMSGD(); 00053 00058 virtual inline EClassifierType get_classifier_type() { return CT_SVMSGD; } 00059 00068 virtual bool train(CFeatures* data=NULL); 00069 00075 inline void set_C(float64_t c1, float64_t c2) { C1=c1; C2=c2; } 00076 00081 inline float64_t get_C1() { return C1; } 00082 00087 inline float64_t get_C2() { return C2; } 00088 00093 inline void set_epochs(int32_t e) { epochs=e; } 00094 00099 inline int32_t get_epochs() { return epochs; } 00100 00105 inline void set_bias_enabled(bool enable_bias) { use_bias=enable_bias; } 00106 00111 inline bool get_bias_enabled() { return use_bias; } 00112 00117 inline void set_regularized_bias_enabled(bool enable_bias) { use_regularized_bias=enable_bias; } 00118 00123 inline bool get_regularized_bias_enabled() { return use_regularized_bias; } 00124 00126 inline virtual const char* get_name() const { return "SVMSGD"; } 00127 00128 protected: 00130 void calibrate(); 00131 00132 private: 00133 float64_t t; 00134 float64_t C1; 00135 float64_t C2; 00136 float64_t wscale; 00137 float64_t bscale; 00138 int32_t epochs; 00139 int32_t skip; 00140 int32_t count; 00141 00142 bool use_bias; 00143 bool use_regularized_bias; 00144 }; 00145 } 00146 #endif