source: trunk/test/kernel_lookup_test.cc @ 559

Last change on this file since 559 was 559, checked in by Peter, 17 years ago

some changes in EB

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 4.4 KB
Line 
1// $Id: kernel_lookup_test.cc 559 2006-03-11 22:21:27Z peter $
2
3#include <c++_tools/gslapi/matrix.h>
4#include <c++_tools/classifier/DataLookup1D.h>
5#include <c++_tools/classifier/KernelLookup.h>
6#include <c++_tools/classifier/Kernel_SEV.h>
7#include <c++_tools/classifier/MatrixLookup.h>
8#include <c++_tools/classifier/PolynomialKernelFunction.h>
9
10
11#include <fstream>
12#include <iostream>
13#include <vector>
14
15using namespace theplu;
16
17int main(const int argc,const char* argv[])
18{
19  using namespace theplu::classifier;
20
21  std::ostream* error;
22  if (argc>1 && argv[1]==std::string("-v"))
23    error = &std::cerr;
24  else {
25    error = new std::ofstream("/dev/null");
26    if (argc>1)
27      std::cout << "lookup_test -v : for printing extra information\n";
28  }
29
30  bool ok =true;
31  *error << "\nTesting KernelLookup" << std::endl;
32  gslapi::matrix data_core(1,5);
33  for (size_t i=0; i<data_core.columns(); i++)
34    data_core(0,i)=i;
35  classifier::MatrixLookup data(data_core);
36  classifier::PolynomialKernelFunction kf;
37  classifier::Kernel_SEV kernel(data,kf);
38
39  *error << "KernelLookup::KernelLookup(const Kernel&)...";
40  classifier::KernelLookup k1(kernel);
41  if (k1.rows()!=kernel.rows() || k1.columns()!=kernel.columns()) {
42    ok =false;
43    *error <<   "ERROR:" << std::endl;
44    *error << "Dimensions do not agree." << std::endl;
45  }
46  else {
47    for (size_t i=0; i<k1.rows(); i++) 
48      for (size_t j=0; j<k1.columns(); j++) 
49        if (k1(i,j)!=kernel(i,j)) {
50          ok =false;
51          *error << "ERROR:\n"
52                 << "KernelLookup::KernelLookup(const Kernel& data)"
53                 << std::endl;
54          *error << "k(" << i << "," << j << ") is " << k1(i,j) 
55                 << "expected " << kernel(i,j) << std::endl;
56        }
57    if (ok)
58      *error << "Ok." << std::endl;
59  }
60
61  std::vector<size_t> index_odd;
62  index_odd.push_back(1);
63  index_odd.push_back(3);
64  std::vector<size_t> index_even;
65  index_even.push_back(2);
66  index_even.push_back(0);
67  index_even.push_back(4);
68  *error << "KernelLookup::KernelLookup(const Kernel&,\n"
69         << "                           const vector<size_t>&,\n"
70         << "                           const vector<size_t>&)...";
71  classifier::KernelLookup k2(kernel,index_odd,index_even);
72  if (k2.rows()!=index_odd.size() || k2.columns()!=index_even.size()) {
73    ok =false;
74    *error << "ERROR:" << std::endl;
75    *error << "Dimensions do not agree." << std::endl;
76  }
77  for (size_t i=0; i<k2.rows(); i++) 
78    for (size_t j=0; j<k2.columns(); j++) 
79      if (k2(i,j)!=kernel(index_odd[i],index_even[j])) {
80        ok =false;
81        *error << "ERROR:\n"
82               << "KernelLookup::KernelLookup(const Kernel& data)"
83               << std::endl;
84        *error << "k(" << i << "," << j << ") is " << k2(i,j) 
85               << "expected " << kernel(index_odd[i],index_even[j]) << std::endl;
86      }
87  if (ok)
88    *error << "Ok." << std::endl;
89 
90  *error << "KernelLookup::KernelLookup(const KernelLookup&,\n"
91         << "                           const vector<size_t>&,\n"
92         << "                           const vector<size_t>&)...";
93  std::vector<size_t> one(1,1);
94  classifier::KernelLookup k3(k2,one,one);
95  if (k3.rows()!=one.size() || k3.columns()!=one.size()) {
96    ok =false;
97    *error <<   "ERROR:" << std::endl;
98    *error << "Dimensions do not agree." << std::endl;
99  }
100  else if (k3(0,0)!=k2(1,1)){
101    ok = false;
102    *error << "ERROR:\n k3(0,0) found to be " << k3(0,0) 
103           << " expected " << k2(1,1) << std::endl;
104  }
105  else
106    *error << "Ok." << std::endl;
107
108  *error << "KernelLookup::KernelLookup(const KernelLookup&)...";
109  classifier::KernelLookup k4(k2);
110  if (k4.rows()!=k2.rows() || k4.columns()!=k2.columns()) {
111    ok =false;
112    *error <<   "ERROR:" << std::endl;
113    *error << "Dimensions do not agree." << std::endl;
114    *error << "Dimension: rows " << k4.rows() << " columns " << k4.columns()
115           << "\nOriginal: rows " << k2.rows() << " columns " << k2.columns()
116           << std::endl;
117  }
118  else {
119    for (size_t i=0; i<k4.rows(); i++) 
120      for (size_t j=0; j<k4.columns(); j++) 
121        if (k4(i,j)!=k2(i,j)) {
122          ok =false;
123          *error << "ERROR:\n"
124                 << "KernelLookup::KernelLookup(const KernelLookup&)"
125                 << std::endl;
126          *error << "k(" << i << "," << j << ") is " << k4(i,j) 
127                 << "expected " << k2(i,j) << std::endl;
128        }
129  }
130 
131  KernelLookup k5(k1,index_even,index_even);
132  std::vector<size_t> index5;
133  index5.push_back(0);
134  index5.push_back(2);
135  const KernelLookup* k6 = k5.training_data(index5); 
136  for (size_t s=0; s<k6->rows(); s++) 
137    for (size_t t=0; t<k6->rows(); t++) 
138      ok = ok && ((*k6)(s,t)==(*k6)(t,s));
139
140
141  if (ok)
142    *error << "Ok." << std::endl;
143
144  if (ok)
145    *error << "Test Ok." << std::endl;
146  if (error!=&std::cerr)
147    delete error;
148  return (ok ? 0 : -1);
149}
150
Note: See TracBrowser for help on using the repository browser.