Changeset 537
- Timestamp:
- Mar 5, 2006, 10:30:03 AM (17 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 10 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/lib/classifier/DataLookup1D.cc
r536 r537 2 2 3 3 #include <c++_tools/classifier/DataLookup1D.h> 4 #include <c++_tools/classifier/MatrixLookup.h> 4 5 5 6 #include <cassert> … … 11 12 DataLookup1D::DataLookup1D(const DataLookup2D& m, const size_t i, 12 13 const bool row_vector) 13 : column_vector_(!row_vector), index_(i), matrix_(&m) 14 : column_vector_(!row_vector), index_(i), matrix_(&m), owner_(false) 14 15 { 15 16 assert( !column_vector_ || i<m.columns()); … … 17 18 } 18 19 20 DataLookup1D::DataLookup1D(const size_t size, const double value) 21 : column_vector_(false), index_(0), owner_(true) 22 { 23 matrix_ = new MatrixLookup(1,size,value); 24 } 25 26 DataLookup1D::DataLookup1D(const DataLookup1D& other) 27 : column_vector_(other.column_vector_), index_(other.index_), 28 matrix_(other.matrix_), owner_(false) 29 { 30 } 31 19 32 DataLookup1D::~DataLookup1D() 20 33 { 34 if (owner_) 35 delete matrix_; 21 36 } 22 37 -
trunk/lib/classifier/DataLookup1D.h
r536 r537 35 35 36 36 /// 37 /// Copy constructor 38 /// 39 DataLookup1D(const DataLookup1D&); 40 41 /// 42 /// Construct DataLookup1D that owns its underlying matrix. Object 43 /// has size @ size and all its element is equal to @a value. 44 /// 45 DataLookup1D(const size_t size, const double value=0); 46 37 47 /// 38 48 /// 39 ~DataLookup1D(); 49 /// 50 virtual ~DataLookup1D(); 40 51 41 52 /// … … 60 71 61 72 private: 62 DataLookup1D();63 73 64 74 const bool column_vector_; 65 75 const size_t index_; 66 76 const DataLookup2D* matrix_; 67 77 const bool owner_; 78 68 79 }; 69 80 /// -
trunk/lib/classifier/DataLookup2D.cc
r536 r537 18 18 const std::vector<size_t>& row, 19 19 const std::vector<size_t>& col) 20 : owner_(false) 20 21 { 21 22 assert(row_index_.empty()); … … 38 39 const std::vector<size_t>& index, 39 40 const bool row) 41 : owner_(false) 40 42 { 41 43 if (row){ … … 61 63 DataLookup2D::DataLookup2D(const std::vector<size_t>& row, 62 64 const std::vector<size_t>& col) 63 : row_index_(row),column_index_(col) 65 : row_index_(row),column_index_(col), owner_(false) 64 66 { 65 67 } … … 68 70 69 71 DataLookup2D::DataLookup2D(const DataLookup2D& mv) 70 : row_index_(mv.row_index_),column_index_(mv.column_index_) 72 : row_index_(mv.row_index_),column_index_(mv.column_index_), owner_(false) 71 73 { 72 74 } 73 75 74 76 77 DataLookup2D::DataLookup2D(const size_t rows, const size_t columns, 78 const bool owner) 79 : row_index_(std::vector<size_t>(rows,0)), 80 column_index_(std::vector<size_t>(columns,0)), 81 owner_(owner) 82 { 83 } 84 75 85 }} // of namespace classifier and namespace theplu -
trunk/lib/classifier/DataLookup2D.h
r534 r537 22 22 /// Default constructor. 23 23 /// 24 inline DataLookup2D(void) {};24 inline DataLookup2D(void) : owner_(false){}; 25 25 26 26 … … 47 47 DataLookup2D(const DataLookup2D&, const std::vector<size_t>& index, 48 48 const bool row); 49 50 51 /// 52 /// 53 /// 54 DataLookup2D(const size_t, const size_t, const bool owner); 49 55 50 56 … … 91 97 std::vector<size_t> row_index_; 92 98 std::vector<size_t> column_index_; 93 99 bool owner_; 94 100 }; 95 101 -
trunk/lib/classifier/KernelLookup.cc
r482 r537 5 5 6 6 7 #include <cassert> 8 #ifndef NDEBUG 9 #include <algorithm> 10 #endif 7 11 8 12 namespace theplu { … … 18 22 } 19 23 20 KernelLookup::KernelLookup(const KernelLookup& kernel, 21 const std::vector<size_t>& row, 22 const std::vector<size_t>& column) 24 KernelLookup::KernelLookup(const Kernel& kernel, 25 const std::vector<size_t>& row, 26 const std::vector<size_t>& column) 27 : DataLookup2D(row,column), kernel_(&kernel) 28 { 29 // Checking that each row index is less than kernel.rows() 30 assert(row.empty() || 31 *(std::max_element(row.begin(),row.end()))<kernel.rows()); 32 // Checking that each column index is less than kernel.column() 33 assert(column.empty() || 34 *(std::max_element(column.begin(),column.end()))<kernel.columns()); 35 36 } 37 38 39 KernelLookup::KernelLookup(const KernelLookup& kernel, 40 const std::vector<size_t>& row, 41 const std::vector<size_t>& column) 23 42 : DataLookup2D(kernel,row,column), kernel_(kernel.kernel_) 24 43 { 25 44 } 26 45 46 47 KernelLookup::KernelLookup(const KernelLookup& kernel) 48 : DataLookup2D(kernel), kernel_(kernel.kernel_) 49 { 50 } 51 52 53 KernelLookup::~KernelLookup(void) 54 { 55 if (owner_) 56 delete kernel_; 57 } 58 27 59 const KernelLookup* 28 60 KernelLookup::training_data(const std::vector<size_t>& train) const -
trunk/lib/classifier/KernelLookup.h
r536 r537 47 47 48 48 /// 49 /// Copy constructor 50 /// 51 KernelLookup(const KernelLookup&); 52 53 54 /// 49 55 /// Contructor building a sub-KernelLookup from a KernelLookup 50 56 /// defined by row index vector and column index vector. The … … 58 64 const std::vector<size_t>& column); 59 65 60 ///61 /// Copy constructor62 66 /// 63 KernelLookup(const KernelLookup&); 67 /// @brief Destructor 68 /// 69 /// Deletes underlying Kernel if KernelLookup owns it. 70 /// 71 virtual ~KernelLookup(void); 64 72 65 73 -
trunk/lib/classifier/MatrixLookup.cc
r536 r537 29 29 assert(row.empty() || 30 30 *(std::max_element(row.begin(),row.end()))<data.rows()); 31 // Checking that each rowindex is less than data.column()31 // Checking that each column index is less than data.column() 32 32 assert(col.empty() || 33 33 *(std::max_element(col.begin(),col.end()))<data.columns()); … … 95 95 96 96 97 MatrixLookup::MatrixLookup(const size_t rows, const size_t columns, 98 const double value) 99 : DataLookup2D(rows,columns, true) 100 { 101 data_ = new gslapi::matrix(1,1,value); 102 } 103 104 105 MatrixLookup::~MatrixLookup(void) 106 { 107 if (owner_) 108 delete data_; 109 } 110 111 97 112 const MatrixLookup* 98 113 MatrixLookup::training_data(const std::vector<size_t>& i) const -
trunk/lib/classifier/MatrixLookup.h
r536 r537 96 96 97 97 /// 98 /// Constructor creating a MatrixLookup with @a rows rows, @a 99 /// columns columns, and all values are set to @a value. Created 100 /// object owns its underlying matrix. 101 /// 102 MatrixLookup(const size_t rows, const size_t columns, const double value=0); 103 104 /// 98 105 /// Destructor 99 106 /// 100 ~MatrixLookup() {};107 virtual ~MatrixLookup(); 101 108 102 109 -
trunk/lib/classifier/SVM.cc
r527 r537 77 77 78 78 sample_.init(alpha_,tolerance_); 79 gslapi::vector E(target_.size() );79 gslapi::vector E(target_.size(),0); 80 80 for (size_t i=0; i<E.size(); i++) { 81 E(i)=0;82 81 for (size_t j=0; j<E.size(); j++) 83 82 E(i) += kernel_mod(i,j)*target(j)*alpha_(j); … … 192 191 193 192 // If no violation check among non-support vectors 194 195 193 sample_.shuffle(); 196 197 194 for (size_t i=sample_.nof_sv(); i<sample_.n();i++){ 198 //std::cout << "nr: " << i << std::endl;199 195 if (target_.binary(sample_(i))){ 200 196 if(E(sample_(i)) < E(sample_.value_first()) - 2*tolerance_){ … … 228 224 } 229 225 230 //std::cout << "Done!" << std::endl;231 226 // If there is no violation then we should stop training 232 227 return false; -
trunk/test/Makefile.am
r533 r537 4 4 5 5 TESTS = alignment_test averager_test consensus_inputranker_test \ 6 crossvalidation_test ensemble_test inputranker_test \7 kernel_test lookup_test matrix_test \6 crossvalidation_test data_lookup_1d_test ensemble_test inputranker_test \ 7 kernel_test kernel_lookup_test matrix_test matrix_lookup_test \ 8 8 ncc_test nni_test pca_test regression_test rnd_test score_test \ 9 9 statistics_test stl_utility_test svd_test svm_test target_test \ … … 22 22 consensus_inputranker_test_SOURCES = consensus_inputranker_test.cc 23 23 crossvalidation_test_SOURCES = crossvalidation_test.cc 24 data_lookup_1d_test_SOURCES = data_lookup_1d_test.cc 24 25 ensemble_test_SOURCES = ensemble_test.cc 25 26 inputranker_test_SOURCES = inputranker_test.cc 26 27 kernel_test_SOURCES = kernel_test.cc 27 lookup_test_SOURCES =lookup_test.cc28 kernel_lookup_test_SOURCES = kernel_lookup_test.cc 28 29 matrix_test_SOURCES = matrix_test.cc 30 matrix_lookup_test_SOURCES = matrix_lookup_test.cc 29 31 ncc_test_SOURCES = ncc_test.cc 30 32 nni_test_SOURCES = nni_test.cc -
trunk/test/matrix_lookup_test.cc
r536 r537 2 2 3 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 4 #include <c++_tools/classifier/MatrixLookup.h> 8 #include <c++_tools/classifier/PolynomialKernelFunction.h>9 10 5 11 6 #include <fstream> … … 16 11 17 12 gslapi::matrix matrix(size_t n); 18 19 bool test_data_lookup1D(std::ostream* error);20 bool test_kernel_lookup(std::ostream* error);21 bool test_matrix_lookup(std::ostream* error);22 13 23 14 int main(const int argc,const char* argv[]) … … 33 24 std::cout << "lookup_test -v : for printing extra information\n"; 34 25 } 26 bool ok = true; 35 27 36 *error << "Testing Lookup Classes" << std::endl;37 bool ok = test_data_lookup1D(error);38 39 ok = ok && test_matrix_lookup(error);40 41 ok = ok && test_kernel_lookup(error);42 43 if (ok)44 *error << "Ok." << std::endl;45 46 if (error!=&std::cerr)47 delete error;48 49 return (ok ? 0 : -1);50 }51 52 gslapi::matrix matrix(size_t n)53 {54 gslapi::matrix res(n,n);55 for (size_t i=0;i<n;i++)56 for (size_t j=0;j<n;j++)57 res(i,j)=10*i+j;58 return res;59 }60 61 bool test_data_lookup1D(std::ostream* error)62 {63 bool ok =true;64 *error << "Testing DataLookup1D" << std::endl;65 gslapi::matrix gsl_m1(matrix(5));66 std::vector<size_t> index_odd;67 index_odd.push_back(1);68 index_odd.push_back(3);69 std::vector<size_t> index_even;70 index_even.push_back(2);71 index_even.push_back(0);72 index_even.push_back(4);73 classifier::MatrixLookup m1(gsl_m1,index_odd,index_even);74 *error << "DataLookup1D::DataLookup1D(const MatrixLookup&\n"75 << " const size_t, const bool)...";76 classifier::DataLookup1D v1(m1,1);77 if (v1.size()!=m1.columns() || v1(0)!=m1(1,0) ||78 v1(1)!=m1(1,1) ) {79 ok =false;80 *error << "\nERROR" << std::endl;81 *error << "size: " << v1.size() << " expected " << m1.columns() << "\n"82 << "v1(0): " << v1(0) << " expected " << m1(1,0) << "\n"83 << "v1(1): " << v1(1) << " expected " << m1(1,1)84 << std::endl;85 }86 else87 *error << "Ok" << std::endl;88 89 *error << "DataLookup1D::DataLookup1D(const MatrixLookup&\n"90 << " const size_t, const bool)...";91 classifier::DataLookup1D v2(m1,1,false);92 if (v2.size()!=m1.rows() || v2(0)!=m1(0,1) || v2(1)!=m1(1,1) ) {93 ok =false;94 *error << "\nERROR\n"95 << "size: " << v2.size() << " expected " << m1.rows() << "\n"96 << "v2(0): " << v2(0) << " expected " << m1(0,1) << "\n"97 << "v2(1): " << v2(1) << " expected " << m1(1,1)98 << std::endl;99 }100 else101 *error << "Ok" << std::endl;102 103 return ok;104 }105 106 bool test_kernel_lookup(std::ostream* error)107 {108 bool ok =true;109 *error << "\nTesting KernelLookup" << std::endl;110 gslapi::matrix data_core(1,5);111 for (size_t i=0; i<data_core.columns(); i++)112 data_core(0,i)=i;113 classifier::MatrixLookup data(data_core);114 classifier::PolynomialKernelFunction kf;115 classifier::Kernel_SEV kernel(data,kf);116 *error << "KernelLookup::KernelLookup(const Kernel&)...";117 classifier::KernelLookup k1(kernel);118 if (k1.rows()!=kernel.rows() || k1.columns()!=kernel.columns()) {119 ok =false;120 *error << "ERROR:" << std::endl;121 *error << "Dimensions do not agree." << std::endl;122 }123 for (size_t i=0; i<k1.rows(); i++)124 for (size_t j=0; j<k1.columns(); j++)125 if (k1(i,j)!=kernel(i,j)) {126 ok =false;127 *error << "ERROR:\n"128 << "KernelLookup::KernelLookup(const Kernel& data)"129 << std::endl;130 *error << "k(" << i << "," << j << ") is " << k1(i,j)131 << "expected " << kernel(i,j) << std::endl;132 }133 134 std::vector<size_t> index_odd;135 index_odd.push_back(1);136 index_odd.push_back(3);137 std::vector<size_t> index_even;138 index_even.push_back(2);139 index_even.push_back(0);140 index_even.push_back(5);141 142 143 144 return ok;145 }146 147 bool test_matrix_lookup(std::ostream* error)148 {149 bool ok =true;150 28 *error << "\nTesting MatrixLookup" << std::endl; 151 29 *error << "MatrixLookup::MatrixLookup(const gslapi::matrix& data)..."; … … 234 112 *error << "Ok" << std::endl; 235 113 114 *error << "MatrixLookup::MatrixLookup(const size_t,const size_t,\n" 115 << " const double)..."; 116 classifier::MatrixLookup m7(103,112,12); 117 if (m7.rows()!=103 || m7.columns()!=112 || m7(0,0)!=12) { 118 ok =false; 119 *error << "ERROR:" << std::endl; 120 } 121 else 122 *error << "Ok" << std::endl; 123 236 124 237 125 *error << "MatrixLookup::training_data(const std::vector<size_t>)..."; … … 257 145 delete ValData; 258 146 147 if (ok) 148 *error << "Test Ok." << std::endl; 149 if (error!=&std::cerr) 150 delete error; 151 return (ok ? 0 : -1); 152 } 259 153 260 return ok; 154 gslapi::matrix matrix(size_t n) 155 { 156 gslapi::matrix res(n,n); 157 for (size_t i=0;i<n;i++) 158 for (size_t j=0;j<n;j++) 159 res(i,j)=10*i+j; 160 return res; 261 161 } 162 163
Note: See TracChangeset
for help on using the changeset viewer.