yat/classifier/Perceptron.h

Code
Comments
Other
Rev Date Author Line
3709 08 Nov 17 peter 1 #ifndef theplu_yat_classifier_perceptron
3709 08 Nov 17 peter 2 #define theplu_yat_classifier_perceptron
3709 08 Nov 17 peter 3
3709 08 Nov 17 peter 4 // $Id$
3709 08 Nov 17 peter 5
3709 08 Nov 17 peter 6 /*
4207 26 Aug 22 peter 7   Copyright (C) 2017, 2021, 2022 Peter Johansson
3709 08 Nov 17 peter 8
3709 08 Nov 17 peter 9   This file is part of the yat library, http://dev.thep.lu.se/yat
3709 08 Nov 17 peter 10
3709 08 Nov 17 peter 11   The yat library is free software; you can redistribute it and/or
3709 08 Nov 17 peter 12   modify it under the terms of the GNU General Public License as
3709 08 Nov 17 peter 13   published by the Free Software Foundation; either version 3 of the
3709 08 Nov 17 peter 14   License, or (at your option) any later version.
3709 08 Nov 17 peter 15
3709 08 Nov 17 peter 16   The yat library is distributed in the hope that it will be useful,
3709 08 Nov 17 peter 17   but WITHOUT ANY WARRANTY; without even the implied warranty of
3709 08 Nov 17 peter 18   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
3709 08 Nov 17 peter 19   General Public License for more details.
3709 08 Nov 17 peter 20
3709 08 Nov 17 peter 21   You should have received a copy of the GNU General Public License
3709 08 Nov 17 peter 22   along with yat. If not, see <http://www.gnu.org/licenses/>.
3709 08 Nov 17 peter 23 */
3709 08 Nov 17 peter 24
3709 08 Nov 17 peter 25 #include <yat/utility/Matrix.h>
3709 08 Nov 17 peter 26 #include <yat/utility/Vector.h>
3709 08 Nov 17 peter 27
3709 08 Nov 17 peter 28 namespace theplu {
3709 08 Nov 17 peter 29 namespace yat {
3709 08 Nov 17 peter 30 namespace classifier {
3709 08 Nov 17 peter 31
3709 08 Nov 17 peter 32   class Target;
3709 08 Nov 17 peter 33
3709 08 Nov 17 peter 34   /**
3709 08 Nov 17 peter 35      \brief A Single-layer Perceptron
3709 08 Nov 17 peter 36
4052 26 Mar 21 peter 37      Data are modeled as \f$ \mu = \frac{1}{1 + \exp(-wx)} \f$
3709 08 Nov 17 peter 38
3709 08 Nov 17 peter 39      \since New in yat 0.16
3709 08 Nov 17 peter 40    */
3709 08 Nov 17 peter 41   class Perceptron
3709 08 Nov 17 peter 42   {
3709 08 Nov 17 peter 43   public:
3709 08 Nov 17 peter 44     /**
3709 08 Nov 17 peter 45        Estimated covariance of weight vector.
3709 08 Nov 17 peter 46
3709 08 Nov 17 peter 47        Covariance is estimated as \f$ \left(X'SX\right)^{-1} \f$ where
3709 08 Nov 17 peter 48        \f$ S \f$ is a diagnoal matrix with \f$ S_{ii} = \mu_i
3709 08 Nov 17 peter 49        (1-\mu_i) \f$ where \f$ \mu_i \f$ is the expected value of
3709 08 Nov 17 peter 50        sample i.
3709 08 Nov 17 peter 51      */
3709 08 Nov 17 peter 52     const utility::Matrix& covariance(void) const;
3709 08 Nov 17 peter 53
3709 08 Nov 17 peter 54     /**
3709 08 Nov 17 peter 55        The odds ratio is defined as \f$ \textrm{OR} = \exp(w_i) \f$
3709 08 Nov 17 peter 56      */
3709 08 Nov 17 peter 57     double oddsratio(size_t i) const;
3709 08 Nov 17 peter 58
3709 08 Nov 17 peter 59     /**
3709 08 Nov 17 peter 60        The lower end of the confidence interval of estimation of
3709 08 Nov 17 peter 61        oddsratio \a i with confidence 1 - \a alpha. The true value is
3709 08 Nov 17 peter 62        estimated to be within confidence interval with probability 1 -
3709 08 Nov 17 peter 63        \a alpha.
3709 08 Nov 17 peter 64      */
3709 08 Nov 17 peter 65     double oddsratio_lower_CI(size_t i, double alpha=0.05) const;
3709 08 Nov 17 peter 66
3709 08 Nov 17 peter 67     /**
3709 08 Nov 17 peter 68        The lower end of the confidence interval of estimation of
3709 08 Nov 17 peter 69        oddsratio \a i with confidence 1 - \a alpha. The true value is
3709 08 Nov 17 peter 70        estimated to be within confidence interval with probability 1 -
3709 08 Nov 17 peter 71        \a alpha.
3709 08 Nov 17 peter 72      */
3709 08 Nov 17 peter 73     double oddsratio_upper_CI(size_t i, double alpha=0.05) const;
3709 08 Nov 17 peter 74
3709 08 Nov 17 peter 75     /**
3709 08 Nov 17 peter 76        \return p-value that for null hypothesis that ith weight is zero
3709 08 Nov 17 peter 77      */
3709 08 Nov 17 peter 78     double p_value(size_t i) const;
3709 08 Nov 17 peter 79
3709 08 Nov 17 peter 80     /**
3709 08 Nov 17 peter 81        \return \f$ \frac{1}{1 + \exp(-wx)} \f$
3709 08 Nov 17 peter 82      */
3709 08 Nov 17 peter 83     double predict(const utility::VectorBase& x) const;
3709 08 Nov 17 peter 84
3709 08 Nov 17 peter 85     /**
3709 08 Nov 17 peter 86        \brief train the model
3709 08 Nov 17 peter 87
4052 26 Mar 21 peter 88        Model parameters, \f$w\f$, are calculated such that the
4200 19 Aug 22 peter 89        log-likelihood,
4052 26 Mar 21 peter 90        \f$ \log \mathcal{L} = \sum y_i \log \left(\mu_i\right) +
4052 26 Mar 21 peter 91        (1-y_i) \log \left(1 - \mu_i\right) \f$,
4052 26 Mar 21 peter 92        is maximized.
4052 26 Mar 21 peter 93
3709 08 Nov 17 peter 94        \param x each row corresponds to a data point and each column a
3709 08 Nov 17 peter 95        feature.
3709 08 Nov 17 peter 96        \param target describes the class label for each data
3709 08 Nov 17 peter 97        point. Data that has binary set are trained to output 1.
3709 08 Nov 17 peter 98      */
4125 14 Jan 22 peter 99     void train(const utility::MatrixBase& x, const Target& target);
3709 08 Nov 17 peter 100
3709 08 Nov 17 peter 101     /**
3709 08 Nov 17 peter 102        \return trained weight vector, \f$w\f$.
3709 08 Nov 17 peter 103      */
3709 08 Nov 17 peter 104     const utility::Vector& weight(void) const;
3709 08 Nov 17 peter 105   private:
3709 08 Nov 17 peter 106     utility::Vector weight_;
3709 08 Nov 17 peter 107     utility::Matrix covariance_;
3709 08 Nov 17 peter 108     double margin(size_t i, double alpha) const;
3709 08 Nov 17 peter 109     // using compiler generated copy
3709 08 Nov 17 peter 110     //Perceptron(const Perceptron&)
3709 08 Nov 17 peter 111     //Perceptron& operator=(const Perceptron&)
3709 08 Nov 17 peter 112   };
3709 08 Nov 17 peter 113
3709 08 Nov 17 peter 114
3709 08 Nov 17 peter 115 }}}// end of namespace classifier, yat, and theplu
3709 08 Nov 17 peter 116 #endif