Changeset 1031 for trunk/yat/classifier
- Timestamp:
- Feb 4, 2008, 4:44:44 PM (16 years ago)
- Location:
- trunk/yat/classifier
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/yat/classifier/IGP.h
r1009 r1031 30 30 #include "yat/utility/vector.h" 31 31 #include "yat/utility/yat_assert.h" 32 #include "yat/statistics/ vector_distance.h"32 #include "yat/statistics/distance.h" 33 33 34 34 #include <cmath> … … 95 95 DataLookup1D b(matrix_,j,false); 96 96 double dist=statistics:: 97 vector_distance(a.begin,a.end(),b.begin(),98 statistics:: vector_distance_traits<Distance>::distace());97 distance(a.begin,a.end(),b.begin(), 98 statistics::distance_traits<Distance>::distace()); 99 99 if(j!=i && dist<mindist) { 100 100 mindist=dist; -
trunk/yat/classifier/KNN.h
r1028 r1031 30 30 #include "SupervisedClassifier.h" 31 31 #include "Target.h" 32 #include "yat/statistics/ vector_distance.h"32 #include "yat/statistics/distance.h" 33 33 #include "yat/utility/matrix.h" 34 34 #include "yat/utility/yat_assert.h" … … 144 144 145 145 template <typename Distance> 146 utility::matrix* KNN<Distance>::calculate_distances(const DataLookup2D& input) const146 utility::matrix* KNN<Distance>::calculate_distances(const DataLookup2D& test) const 147 147 { 148 148 // matrix with training samples as rows and test samples as columns 149 149 utility::matrix* distances = 150 new utility::matrix(data_.columns(),input.columns()); 151 152 // if both training and test are unweighted: unweighted 153 // calculations are used. 154 const MatrixLookup* test_unweighted = 155 dynamic_cast<const MatrixLookup*>(&input); 156 if(test_unweighted && !data_.weighted()) { 157 const MatrixLookup* data_unweighted = 158 dynamic_cast<const MatrixLookup*>(&data_); 150 new utility::matrix(data_.columns(),test.columns()); 151 152 // unweighted test data 153 if(const MatrixLookup* test_unweighted = 154 dynamic_cast<const MatrixLookup*>(&test)) { 159 155 for(size_t i=0; i<data_.columns(); i++) { 160 classifier::DataLookup1D training(*data_unweighted,i,false); 161 for(size_t j=0; j<input.columns(); j++) { 156 for(size_t j=0; j<test.columns(); j++) { 162 157 classifier::DataLookup1D test(*test_unweighted,j,false); 163 utility::yat_assert<std::runtime_error>(training.size()==test.size());164 158 (*distances)(i,j) = 165 statistics::vector_distance(training.begin(),training.end(), 166 test.begin(), typename statistics::vector_distance_traits<Distance>::distance()); 159 statistics::distance(classifier::DataLookup1D(data_, 160 i,false).begin(), 161 classifier::DataLookup1D(data_, 162 i,false).end(), 163 test.begin(), 164 typename statistics:: 165 distance_traits<Distance>::distance()); 167 166 utility::yat_assert<std::runtime_error>(!std::isnan((*distances)(i,j))); 168 167 } 169 168 } 170 169 } 171 // if either training or test is weighted: weighted calculations 172 // are used. 170 // weighted test data 173 171 else { 174 172 const MatrixLookupWeighted* data_weighted = 175 173 dynamic_cast<const MatrixLookupWeighted*>(&data_); 176 174 const MatrixLookupWeighted* test_weighted = 177 dynamic_cast<const MatrixLookupWeighted*>(& input);175 dynamic_cast<const MatrixLookupWeighted*>(&test); 178 176 if(data_weighted && test_weighted) { 179 177 for(size_t i=0; i<data_.columns(); i++) { 180 178 classifier::DataLookupWeighted1D training(*data_weighted,i,false); 181 for(size_t j=0; j< input.columns(); j++) {179 for(size_t j=0; j<test.columns(); j++) { 182 180 classifier::DataLookupWeighted1D test(*test_weighted,j,false); 183 181 utility::yat_assert<std::runtime_error>(training.size()==test.size()); 184 182 (*distances)(i,j) = 185 statistics:: vector_distance(training.begin(),training.end(),186 test.begin(), typename statistics::vector_distance_traits<Distance>::distance());183 statistics::distance(training.begin(),training.end(), 184 test.begin(), typename statistics::distance_traits<Distance>::distance()); 187 185 utility::yat_assert<std::runtime_error>(!std::isnan((*distances)(i,j))); 188 186 } … … 251 249 252 250 template <typename Distance> 253 void KNN<Distance>::predict(const DataLookup2D& input,251 void KNN<Distance>::predict(const DataLookup2D& test, 254 252 utility::matrix& prediction) const 255 253 { 256 utility::matrix* distances=calculate_distances(input); 254 utility::yat_assert<std::runtime_error>(data_.rows()==test.rows()); 255 256 utility::matrix* distances=calculate_distances(test); 257 257 258 258 // for each test sample (column in distances) find the closest 259 259 // training samples 260 prediction.clone(utility::matrix(target_.nof_classes(), input.columns(),0.0));260 prediction.clone(utility::matrix(target_.nof_classes(),test.columns(),0.0)); 261 261 for(size_t sample=0;sample<distances->columns();sample++) { 262 262 std::vector<size_t> k_index; -
trunk/yat/classifier/NCC.h
r1013 r1031 37 37 #include "yat/statistics/Averager.h" 38 38 #include "yat/statistics/AveragerWeighted.h" 39 #include "yat/statistics/ vector_distance.h"39 #include "yat/statistics/distance.h" 40 40 41 41 #include "yat/utility/Iterator.h" … … 112 112 // MatrixLookup and MatrixLookupWeighted 113 113 const DataLookup2D& data_; 114 114 bool centroids_nan_; 115 115 }; 116 116 … … 125 125 template <typename Distance> 126 126 NCC<Distance>::NCC(const MatrixLookup& data, const Target& target) 127 : SupervisedClassifier(target), centroids_(0), data_(data) 127 : SupervisedClassifier(target), centroids_(0), data_(data), centroids_nan_(false) 128 128 { 129 129 } … … 131 131 template <typename Distance> 132 132 NCC<Distance>::NCC(const MatrixLookupWeighted& data, const Target& target) 133 : SupervisedClassifier(target), centroids_(0), data_(data) 133 : SupervisedClassifier(target), centroids_(0), data_(data), centroids_nan_(false) 134 134 { 135 135 } … … 169 169 target); 170 170 } 171 ncc->centroids_=0;172 171 } 173 172 catch (std::bad_cast) { … … 198 197 for(size_t c=0;c<target_.nof_classes();c++) { 199 198 (*centroids_)(i,c) = class_averager[c].mean(); 199 if(class_averager[c].sum_w()==0) 200 centroids_nan_=true; 200 201 } 201 202 } … … 230 231 prediction.clone(utility::matrix(centroids_->columns(), test.columns())); 231 232 232 // unweighted test data 233 // unweighted test data and no nan's in centroids 234 // Markus: Should test centroid_nan_ here!!! 233 235 if (const MatrixLookup* test_unweighted = 234 236 dynamic_cast<const MatrixLookup*>(&test)) { … … 240 242 utility::yat_assert<std::runtime_error>(in.size()==centroid.size()); 241 243 prediction(k,j)=statistics:: 242 vector_distance(in.begin(),in.end(),centroid.begin(),243 typename statistics:: vector_distance_traits<Distance>::distance());244 distance(in.begin(),in.end(),centroid.begin(), 245 typename statistics::distance_traits<Distance>::distance()); 244 246 } 245 247 } … … 255 257 utility::yat_assert<std::runtime_error>(in.size()==centroid.size()); 256 258 prediction(k,j)=statistics:: 257 vector_distance(in.begin(),in.end(),centroid.begin(),258 typename statistics:: vector_distance_traits<Distance>::distance());259 distance(in.begin(),in.end(),centroid.begin(), 260 typename statistics::distance_traits<Distance>::distance()); 259 261 } 260 262 }
Note: See TracChangeset
for help on using the changeset viewer.