Changeset 513


Ignore:
Timestamp:
Feb 18, 2006, 5:02:43 PM (16 years ago)
Author:
Peter
Message:

added kernels using weights

Location:
trunk
Files:
3 added
1 deleted
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/lib/classifier/Kernel.h

    r512 r513  
    44#define _theplu_classifier_kernel_
    55
     6#include <c++_tools/gslapi/matrix.h>
     7
    68#include <cctype>
    79
    810namespace theplu {
    9 
    10 namespace gslapi {
    11   class matrix;
    12 }
    13 
    1411namespace classifier {
    1512
     
    3330
    3431    ///
    35     /// Default constructor
    36     ///
    37     //Kernel(void) {};
    38 
    39     ///
    40     /// Copy constructor (not implemented)
    41     ///
    42     Kernel(const Kernel&);
    43 
    44     ///
    4532    ///   Constructor taking the data matrix and KernelFunction as
    4633    ///   input.Each column in the data matrix corresponds to one
    47     ///   sample. @note Can not handle NaNs.
     34    ///   sample.
     35    ///
     36    ///   @note Can not handle NaNs.
    4837    ///
    4938    Kernel(const gslapi::matrix& data, const KernelFunction& kf)
    5039      : data_(data), kf_(&kf) {};
    5140   
     41    ///
     42    /// Constructor using weights
     43    ///
     44    Kernel(const gslapi::matrix& data, const KernelFunction& kf,
     45           const gslapi::matrix& weights)
     46      : data_(data), kf_(&kf) {};
     47   
    5248    ///
    5349    ///   Destructor
     
    6460    /// @brief number of samples
    6561    ///
    66     virtual size_t size(void) const=0;
    67    
     62    inline size_t size(void) const { return data_.columns(); }
     63
    6864  protected:
    6965    const gslapi::matrix& data_;
    7066    const KernelFunction* kf_;
     67
     68  private:
     69    ///
     70    /// Copy constructor (not implemented)
     71    ///
     72    Kernel(const Kernel&);
     73
    7174
    7275  }; // class Kernel
  • trunk/lib/classifier/Kernel_MEV.h

    r512 r513  
    3737
    3838    ///
    39     ///   @todo Constructor taking the \a data matrix, the KernelFunction and a
     39    ///   Constructor taking the \a data matrix, the KernelFunction and a
    4040    ///   \a weight matrix as input. Each column in the data matrix
    4141    ///   corresponds to one sample.
    42     Kernel_MEV(const gslapi::matrix& data, const KernelFunction&,
    43                const gslapi::matrix& weight);
    44 
    45     ///
    46     /// Copy constructor (not implemented)
    47     ///
    48     Kernel_MEV(const Kernel_MEV&);
     42    inline Kernel_MEV(const gslapi::matrix& data, const KernelFunction& kf,
     43                      const gslapi::matrix& weight)
     44    : Kernel(data,kf,weight) {}
    4945
    5046    ///
     
    6157                      gslapi::vector(data_,column,false)); }
    6258
     59  private:
    6360    ///
    64     /// @brief number of samples
     61    /// Copy constructor (not implemented)
    6562    ///
    66     inline size_t size(void) const { return data_.columns(); }
    67 
    68   private:
     63    Kernel_MEV(const Kernel_MEV&);
    6964
    7065  }; // class Kernel_MEV
  • trunk/lib/classifier/Kernel_SEV.h

    r512 r513  
    5757    { return kernel_matrix_(row,column); }
    5858
    59     ///
    60     /// @brief number of samples
    61     ///
    62     inline size_t size(void) const { return kernel_matrix_.columns(); }
    63 
    6459  private:
    6560    gslapi::matrix kernel_matrix_;
  • trunk/lib/classifier/Makefile.am

    r507 r513  
    1616  GaussianKernelFunction.cc \
    1717  InputRanker.cc \
    18   Kernel_MEV.cc \
    1918  Kernel_SEV.cc \
    2019  KernelLookup.cc \
    2120  MatrixLookup.cc \
     21  KernelWeighted_SEV.cc \
    2222  NCC.cc \
    2323  PolynomialKernelFunction.cc \
     
    4242  Kernel_SEV.h \
    4343  KernelLookup.h \
     44  KernelWeighted_MEV.h \
     45  KernelWeighted_SEV.h \
    4446  MatrixLookup.h \
    4547  NCC.h \
  • trunk/test/kernel_test.cc

    r482 r513  
    1212#include <c++_tools/classifier/Kernel_MEV.h>
    1313#include <c++_tools/classifier/Kernel_SEV.h>
     14#include <c++_tools/classifier/KernelWeighted_MEV.h>
     15#include <c++_tools/classifier/KernelWeighted_SEV.h>
    1416
    1517#include <cmath>
     
    2325bool test_MEV(const gslapi::matrix& data, const classifier::KernelFunction* kf,
    2426              const gslapi::matrix& control, const double error_bound,
    25               std::ostream* error)
    26 {
    27   classifier::Kernel_MEV kernel(data,*kf);
    28   for(u_int i=0;i<control.rows();i++)
    29     for(u_int j=0;j<control.columns();j++)
    30       if (fabs(kernel(i,j)-control(i,j))>error_bound)
    31         return false;
    32 
    33   // checking view
    34   std::vector<size_t> index(3);
    35   index[0]=1;
    36   index[1]=2;
    37   index[2]=3;
    38   classifier::KernelLookup kv_raw(kernel);
    39   classifier::KernelLookup kv(kv_raw,index,index);
    40   if (kv.rows()!=index.size()){
    41     *error << "Error: KernelLookup(kernel, index)\n" << std::endl
    42            << "Size of KernelLookup is " << kv.rows() << std::endl
    43            << "expected " << index.size() << std::endl;
    44    
    45     return false;
    46   }
    47   classifier::KernelLookup kv2(kernel);
    48   if (kv2.rows()!=kernel.size()){
    49     *error << "Error: KernelLookup(kernel)\n" << std::endl
    50            << "Size of KernelLookup is " << kv.rows() << std::endl
    51            << "expected " << kernel.size() << std::endl;
    52    
    53     return false;
    54   }
    55 
    56   return true;
    57 }
     27              std::ostream* error);
    5828
    5929bool test_SEV(const gslapi::matrix& data, const classifier::KernelFunction* kf,
    6030              const gslapi::matrix& control, const double error_bound,
    61               std::ostream* error)
    62 {
    63   classifier::Kernel_SEV kernel(data,*kf);
    64   for(u_int i=0;i<control.rows();i++)
    65     for(u_int j=0;j<control.columns();j++)
    66       if (fabs(kernel(i,j)-control(i,j))>error_bound)
    67         return false;
    68 
    69   // checking view
    70   std::vector<size_t> index(3);
    71   index[0]=1;
    72   index[1]=2;
    73   index[2]=3;
    74   classifier::KernelLookup kv(classifier::KernelLookup(kernel),index, index);
    75   if (kv.rows()!=index.size()){
    76     *error << "Error: KernelLookup(kernel, index)\n" << std::endl
    77            << "Size of KernelLookup is " << kv.rows() << std::endl
    78            << "expected " << index.size() << std::endl;
    79    
    80     return false;
    81   }
    82   classifier::KernelLookup kv2(kernel);
    83   if (kv2.rows()!=kernel.size()){
    84     *error << "Error: KernelLookup(kernel)\n" << std::endl
    85            << "Size of KernelLookup is " << kv.rows() << std::endl
    86            << "expected " << kernel.size() << std::endl;
    87    
    88     return false;
    89   }
    90   return true;
    91 }
     31              std::ostream* error);
    9232
    9333
     
    14282  return -1;
    14383}
     84
     85bool test_MEV(const gslapi::matrix& data, const classifier::KernelFunction* kf,
     86              const gslapi::matrix& control, const double error_bound,
     87              std::ostream* error)
     88{
     89  // at least testing constructors
     90  classifier::KernelWeighted_MEV kernel_weighted(data,*kf,data);
     91
     92  classifier::Kernel_MEV kernel(data,*kf);
     93  for(u_int i=0;i<control.rows();i++)
     94    for(u_int j=0;j<control.columns();j++)
     95      if (fabs(kernel(i,j)-control(i,j))>error_bound)
     96        return false;
     97
     98  // checking view
     99  std::vector<size_t> index(3);
     100  index[0]=1;
     101  index[1]=2;
     102  index[2]=3;
     103  classifier::KernelLookup kv_raw(kernel);
     104  classifier::KernelLookup kv(kv_raw,index,index);
     105  if (kv.rows()!=index.size()){
     106    *error << "Error: KernelLookup(kernel, index)\n" << std::endl
     107           << "Size of KernelLookup is " << kv.rows() << std::endl
     108           << "expected " << index.size() << std::endl;
     109   
     110    return false;
     111  }
     112  classifier::KernelLookup kv2(kernel);
     113  if (kv2.rows()!=kernel.size()){
     114    *error << "Error: KernelLookup(kernel)\n" << std::endl
     115           << "Size of KernelLookup is " << kv.rows() << std::endl
     116           << "expected " << kernel.size() << std::endl;
     117   
     118    return false;
     119  }
     120
     121  return true;
     122}
     123
     124bool test_SEV(const gslapi::matrix& data, const classifier::KernelFunction* kf,
     125              const gslapi::matrix& control, const double error_bound,
     126              std::ostream* error)
     127{
     128  // at least testing constructors
     129  classifier::KernelWeighted_MEV kernel_weighted(data,*kf,data);
     130
     131  classifier::Kernel_SEV kernel(data,*kf);
     132  for(u_int i=0;i<control.rows();i++)
     133    for(u_int j=0;j<control.columns();j++)
     134      if (fabs(kernel(i,j)-control(i,j))>error_bound)
     135        return false;
     136
     137  // checking view
     138  std::vector<size_t> index(3);
     139  index[0]=1;
     140  index[1]=2;
     141  index[2]=3;
     142  classifier::KernelLookup kv(classifier::KernelLookup(kernel),index, index);
     143  if (kv.rows()!=index.size()){
     144    *error << "Error: KernelLookup(kernel, index)\n" << std::endl
     145           << "Size of KernelLookup is " << kv.rows() << std::endl
     146           << "expected " << index.size() << std::endl;
     147   
     148    return false;
     149  }
     150  classifier::KernelLookup kv2(kernel);
     151  if (kv2.rows()!=kernel.size()){
     152    *error << "Error: KernelLookup(kernel)\n" << std::endl
     153           << "Size of KernelLookup is " << kv.rows() << std::endl
     154           << "expected " << kernel.size() << std::endl;
     155   
     156    return false;
     157  }
     158  return true;
     159}
     160
     161
Note: See TracChangeset for help on using the changeset viewer.