yat/classifier/SvmMultiClass.h

Code
Comments
Other
Rev Date Author Line
1855 07 Mar 09 peter 1 #ifndef _theplu_yat_classifier_svm_multi_class_
1855 07 Mar 09 peter 2 #define _theplu_yat_classifier_svm_multi_class_
1855 07 Mar 09 peter 3
1855 07 Mar 09 peter 4 // $Id$
1855 07 Mar 09 peter 5
1855 07 Mar 09 peter 6 /*
4359 23 Aug 23 peter 7   Copyright (C) 2009 Peter Johansson
1855 07 Mar 09 peter 8
1855 07 Mar 09 peter 9   This file is part of the yat library, http://dev.thep.lu.se/yat
1855 07 Mar 09 peter 10
1855 07 Mar 09 peter 11   The yat library is free software; you can redistribute it and/or
1855 07 Mar 09 peter 12   modify it under the terms of the GNU General Public License as
1855 07 Mar 09 peter 13   published by the Free Software Foundation; either version 3 of the
1855 07 Mar 09 peter 14   License, or (at your option) any later version.
1855 07 Mar 09 peter 15
1855 07 Mar 09 peter 16   The yat library is distributed in the hope that it will be useful,
1855 07 Mar 09 peter 17   but WITHOUT ANY WARRANTY; without even the implied warranty of
1855 07 Mar 09 peter 18   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1855 07 Mar 09 peter 19   General Public License for more details.
1855 07 Mar 09 peter 20
1855 07 Mar 09 peter 21   You should have received a copy of the GNU General Public License
1855 07 Mar 09 peter 22   along with yat. If not, see <http://www.gnu.org/licenses/>.
1855 07 Mar 09 peter 23 */
1855 07 Mar 09 peter 24
1855 07 Mar 09 peter 25 #include "SVM.h"
1855 07 Mar 09 peter 26
1855 07 Mar 09 peter 27 #include <vector>
1855 07 Mar 09 peter 28
1855 07 Mar 09 peter 29 namespace theplu {
1855 07 Mar 09 peter 30 namespace yat {
1855 07 Mar 09 peter 31 namespace utility {
1855 07 Mar 09 peter 32   class Matrix;
1855 07 Mar 09 peter 33 }
4200 19 Aug 22 peter 34 namespace classifier {
1855 07 Mar 09 peter 35
1855 07 Mar 09 peter 36   class KernelLookup;
1855 07 Mar 09 peter 37   class Target;
1855 07 Mar 09 peter 38
1855 07 Mar 09 peter 39   /**
4200 19 Aug 22 peter 40      \brief Support Vector Machine for more than two classes
1860 08 Mar 09 peter 41
1860 08 Mar 09 peter 42      \since New in yat 0.6
1855 07 Mar 09 peter 43   */
1855 07 Mar 09 peter 44   class SvmMultiClass
1855 07 Mar 09 peter 45   {
1855 07 Mar 09 peter 46   public:
1855 07 Mar 09 peter 47     /**
4200 19 Aug 22 peter 48        \brief Constructor
1855 07 Mar 09 peter 49     */
1855 07 Mar 09 peter 50     SvmMultiClass(void);
1855 07 Mar 09 peter 51
1855 07 Mar 09 peter 52     /**
1861 12 Mar 09 peter 53        \brief C-parameter
1861 12 Mar 09 peter 54
1861 12 Mar 09 peter 55        \see SVM::C(void)
1861 12 Mar 09 peter 56      */
1861 12 Mar 09 peter 57     double C(void) const;
1861 12 Mar 09 peter 58
1855 07 Mar 09 peter 59     /**
1855 07 Mar 09 peter 60        \brief Create an untrained copy of SvmMultiClass.
1855 07 Mar 09 peter 61
1855 07 Mar 09 peter 62        \returns A dynamically allocated SVM, which has to be deleted
1855 07 Mar 09 peter 63        by the caller to avoid memory leaks.
1855 07 Mar 09 peter 64     */
1855 07 Mar 09 peter 65     SvmMultiClass* make_classifier(void) const;
1855 07 Mar 09 peter 66
1855 07 Mar 09 peter 67     /**
1861 12 Mar 09 peter 68        Default is max_epochs set to 100,000.
4200 19 Aug 22 peter 69
1861 12 Mar 09 peter 70        @return number of maximal epochs
1861 12 Mar 09 peter 71     */
1861 12 Mar 09 peter 72     unsigned long int max_epochs(void) const;
4200 19 Aug 22 peter 73
1861 12 Mar 09 peter 74     /**
1861 12 Mar 09 peter 75       \brief set maximal number of epochs in training
1861 12 Mar 09 peter 76     */
1861 12 Mar 09 peter 77     void max_epochs(unsigned long int);
4200 19 Aug 22 peter 78
1861 12 Mar 09 peter 79     /**
4200 19 Aug 22 peter 80        \brief Generate prediction \a predict from \a input.
1855 07 Mar 09 peter 81
4200 19 Aug 22 peter 82        Each row in \a predict is calculated using a binary SVM.
1855 07 Mar 09 peter 83
1855 07 Mar 09 peter 84        \param input kernel to base prediction on. Just like in SVM
1855 07 Mar 09 peter 85        each column corresponds to a sample to predict, and each row
1855 07 Mar 09 peter 86        corresponds to a training sample.
1855 07 Mar 09 peter 87
1855 07 Mar 09 peter 88        \param predict resulting predictions. Each column corresponds
1855 07 Mar 09 peter 89        to a test sample (same as corresponding column in \a
1855 07 Mar 09 peter 90        input). Row \a i corresponds to class \a i, in other words, a
1855 07 Mar 09 peter 91        large value in row \a i suggests that test sample belongs to
1855 07 Mar 09 peter 92        class \a i. If there were no training samples in class \a i,
1855 07 Mar 09 peter 93        row \a i is filled with NaNs.
1855 07 Mar 09 peter 94     */
1855 07 Mar 09 peter 95     void predict(const KernelLookup& input, utility::Matrix& predict) const;
1855 07 Mar 09 peter 96
1855 07 Mar 09 peter 97     /**
1861 12 Mar 09 peter 98        \brief set the C-Parameter
1861 12 Mar 09 peter 99     */
1861 12 Mar 09 peter 100     void set_C(double);
1861 12 Mar 09 peter 101
1861 12 Mar 09 peter 102     /**
1855 07 Mar 09 peter 103        \brief Fit paramaters based on training data.
4200 19 Aug 22 peter 104
1855 07 Mar 09 peter 105        For each class samples belonging to that class are trained
1855 07 Mar 09 peter 106        against the other samples using a binary SVM.
4200 19 Aug 22 peter 107
1855 07 Mar 09 peter 108        \param kernel contains the training data
1855 07 Mar 09 peter 109        \param target infomration on class labels
1855 07 Mar 09 peter 110     */
1855 07 Mar 09 peter 111     void train(const KernelLookup& kernel, const Target& target);
1855 07 Mar 09 peter 112
1855 07 Mar 09 peter 113   private:
1861 12 Mar 09 peter 114     SVM prototype_;
1855 07 Mar 09 peter 115     std::vector<SVM> svm_;
1861 12 Mar 09 peter 116
1861 12 Mar 09 peter 117     // Using compiler generated copy and assign
1861 12 Mar 09 peter 118     //SvmMultiClass(const SvmMultiClass&);
1861 12 Mar 09 peter 119     //SvmMultiClass& operator=(const SvmMultiClass&);
1855 07 Mar 09 peter 120   };
1855 07 Mar 09 peter 121
1855 07 Mar 09 peter 122 }}} // of namespace classifier, yat, and theplu
1855 07 Mar 09 peter 123
1855 07 Mar 09 peter 124 #endif