Changeset 1031
- Timestamp:
- Feb 4, 2008, 4:44:44 PM (16 years ago)
- Location:
- trunk
- Files:
-
- 7 edited
- 3 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/test/knn_test.cc
r999 r1031 24 24 #include "yat/classifier/KNN.h" 25 25 #include "yat/classifier/MatrixLookupWeighted.h" 26 #include "yat/statistics/euclidean_ vector_distance.h"27 #include "yat/statistics/pearson_ vector_distance.h"26 #include "yat/statistics/euclidean_distance.h" 27 #include "yat/statistics/pearson_distance.h" 28 28 #include "yat/utility/matrix.h" 29 29 … … 66 66 67 67 classifier::MatrixLookupWeighted dataviewweighted(data,weights); 68 classifier::KNN<statistics::pearson_ vector_distance_tag> knn(dataviewweighted,targets);68 classifier::KNN<statistics::pearson_distance_tag> knn(dataviewweighted,targets); 69 69 *error << "training KNN" << std::endl; 70 70 knn.train(); -
trunk/test/ncc_test.cc
r1013 r1031 31 31 #include "yat/classifier/Target.h" 32 32 #include "yat/utility/matrix.h" 33 #include "yat/statistics/euclidean_ vector_distance.h"34 #include "yat/statistics/pearson_ vector_distance.h"33 #include "yat/statistics/euclidean_distance.h" 34 #include "yat/statistics/pearson_distance.h" 35 35 #include "yat/utility/utility.h" 36 36 … … 78 78 vec[3]="bjds"; 79 79 classifier::Target target(vec); 80 classifier::NCC<statistics::pearson_ vector_distance_tag> ncctmp(ml,target);80 classifier::NCC<statistics::pearson_distance_tag> ncctmp(ml,target); 81 81 *error << "training...\n"; 82 82 ncctmp.train(); … … 100 100 classifier::Target target1(vec1); 101 101 102 classifier::NCC<statistics::euclidean_ vector_distance_tag> ncc1(ml1,target1);102 classifier::NCC<statistics::euclidean_distance_tag> ncc1(ml1,target1); 103 103 ncc1.train(); 104 104 utility::matrix prediction1; … … 150 150 151 151 classifier::MatrixLookupWeighted dataviewweighted(data,weights); 152 classifier::NCC<statistics::pearson_ vector_distance_tag> ncc(dataviewweighted,targets);152 classifier::NCC<statistics::pearson_distance_tag> ncc(dataviewweighted,targets); 153 153 *error << "training...\n"; 154 154 ncc.train(); -
trunk/test/vector_distance_test.cc
r1012 r1031 24 24 #include "yat/classifier/DataLookupWeighted1D.h" 25 25 #include "yat/classifier/MatrixLookupWeighted.h" 26 #include "yat/statistics/euclidean_ vector_distance.h"27 #include "yat/statistics/pearson_ vector_distance.h"26 #include "yat/statistics/euclidean_distance.h" 27 #include "yat/statistics/pearson_distance.h" 28 28 #include "yat/utility/matrix.h" 29 29 #include "yat/utility/vector.h" … … 47 47 error = new std::ofstream("/dev/null"); 48 48 if (argc>1) 49 std::cout << " vector_distance_test -v : for printing extra information\n";49 std::cout << "distance_test -v : for printing extra information\n"; 50 50 } 51 *error << "testing vector_distance" << std::endl;51 *error << "testing distance" << std::endl; 52 52 bool ok = true; 53 53 … … 59 59 double tolerance=1e-4; 60 60 61 double dist=statistics:: vector_distance(a.begin(),a.end(),b.begin(),62 statistics::euclidean_ vector_distance_tag());61 double dist=statistics::distance(a.begin(),a.end(),b.begin(), 62 statistics::euclidean_distance_tag()); 63 63 if(fabs(dist-2.23607)>tolerance) { 64 *error << "Error in unweighted Euclidean vector_distance " << std::endl;64 *error << "Error in unweighted Euclidean distance " << std::endl; 65 65 ok=false; 66 66 } 67 67 68 dist=statistics:: vector_distance(a.begin(),a.end(),b.begin(),69 statistics::pearson_ vector_distance_tag());68 dist=statistics::distance(a.begin(),a.end(),b.begin(), 69 statistics::pearson_distance_tag()); 70 70 if(fabs(dist-1.5)>tolerance) { 71 *error << "Error in unweighted Pearson vector_distance " << std::endl;71 *error << "Error in unweighted Pearson distance " << std::endl; 72 72 ok=false; 73 73 } … … 85 85 classifier::DataLookupWeighted1D bw(mw,1,true); 86 86 87 dist=statistics:: vector_distance(aw.begin(),aw.end(),bw.begin(),88 statistics::euclidean_ vector_distance_tag());87 dist=statistics::distance(aw.begin(),aw.end(),bw.begin(), 88 statistics::euclidean_distance_tag()); 89 89 90 90 if(fabs(dist-sqrt(6))>tolerance) { 91 *error << "Error in weighted Euclidean vector_distance " << std::endl;91 *error << "Error in weighted Euclidean distance " << std::endl; 92 92 ok=false; 93 93 } 94 94 95 dist=statistics:: vector_distance(aw.begin(),aw.end(),bw.begin(),96 statistics::pearson_ vector_distance_tag());95 dist=statistics::distance(aw.begin(),aw.end(),bw.begin(), 96 statistics::pearson_distance_tag()); 97 97 98 98 if(fabs(dist-2)>tolerance) { 99 *error << "Error in weighted Pearson vector_distance " << std::endl;99 *error << "Error in weighted Pearson distance " << std::endl; 100 100 ok=false; 101 101 } … … 108 108 sb[2] = 1; 109 109 110 dist=statistics:: vector_distance(sa.begin(),sa.end(),sb.begin(),111 statistics::euclidean_ vector_distance_tag());110 dist=statistics::distance(sa.begin(),sa.end(),sb.begin(), 111 statistics::euclidean_distance_tag()); 112 112 if(fabs(dist-2.23607)>tolerance) { 113 *error << "Error in vector_distance for std::vector " << std::endl;113 *error << "Error in distance for std::vector " << std::endl; 114 114 ok=false; 115 115 } … … 118 118 std::list<double> la; 119 119 std::copy(sa.begin(),sa.end(),std::back_inserter<std::list<double> >(la)); 120 dist=statistics:: vector_distance(la.begin(),la.end(),sb.begin(),121 statistics::euclidean_ vector_distance_tag());120 dist=statistics::distance(la.begin(),la.end(),sb.begin(), 121 statistics::euclidean_distance_tag()); 122 122 if(fabs(dist-2.23607)>tolerance) { 123 *error << "Error in vector_distance for std::list " << std::endl;123 *error << "Error in distance for std::list " << std::endl; 124 124 ok=false; 125 125 } 126 126 127 127 if(!ok) { 128 *error << " vector_distance_test failed" << std::endl;128 *error << "distance_test failed" << std::endl; 129 129 } 130 130 if (error!=&std::cerr) -
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 } -
trunk/yat/statistics/Makefile.am
r1003 r1031 40 40 include_statistics_HEADERS = AUC.h Averager.h AveragerPair.h \ 41 41 AveragerWeighted.h AveragerPairWeighted.h \ 42 euclidean_vector_distance.h Fisher.h \42 distance.h euclidean_distance.h Fisher.h \ 43 43 FoldChange.h Histogram.h \ 44 44 KolmogorovSmirnov.h \ 45 45 Pearson.h PearsonCorrelation.h \ 46 pearson_ vector_distance.h ROC.h \46 pearson_distance.h ROC.h \ 47 47 SAMScore.h Score.h SNRScore.h tScore.h tTest.h \ 48 utility.h vector_distance.hVectorFunction.h WilcoxonFoldChange.h48 utility.h VectorFunction.h WilcoxonFoldChange.h -
trunk/yat/statistics/distance.h
r1030 r1031 1 #ifndef theplu_yat_statistics_ vector_distance_h2 #define theplu_yat_statistics_ vector_distance_h1 #ifndef theplu_yat_statistics_distance_h 2 #define theplu_yat_statistics_distance_h 3 3 4 4 // $Id$ … … 39 39 /// For each measure to calculate distances between containers 40 40 /// with random access iterators one should provide a struct 41 /// that inherits from vector_distance_tag and provides a "label" for41 /// that inherits from distance_tag and provides a "label" for 42 42 /// the distance measure. 43 43 /// 44 struct vector_distance_tag {44 struct distance_tag { 45 45 /// tag defining distance measure 46 typedef vector_distance_tag distance;46 typedef distance_tag distance; 47 47 }; 48 48 … … 54 54 /// distance measures. Instead it can access the "label" of each 55 55 /// distance measure through the special template structure 56 /// vector_distance_traits.56 /// distance_traits. 57 57 /// 58 58 template <class T> 59 struct vector_distance_traits {59 struct distance_traits { 60 60 /// \return distance type 61 61 typedef typename T::distance distance; … … 73 73 /// 74 74 template <typename Iter1, typename Iter2, typename Dist> 75 double vector_distance(Iter1 beg1, Iter1 end1, Iter2 beg2, const Dist disttag)75 double distance(Iter1 beg1, Iter1 end1, Iter2 beg2, const Dist disttag) 76 76 { 77 77 return 78 vector_distance(beg1,end1,beg2,79 typename vector_distance_traits<Dist>::distance(),78 distance(beg1,end1,beg2, 79 typename distance_traits<Dist>::distance(), 80 80 typename utility::weighted_if_any2<Iter1, Iter2>::type()); 81 81 } -
trunk/yat/statistics/euclidean_distance.h
r1030 r1031 1 #ifndef theplu_yat_statistics_euclidean_ vector_distance_h2 #define theplu_yat_statistics_euclidean_ vector_distance_h1 #ifndef theplu_yat_statistics_euclidean_distance_h 2 #define theplu_yat_statistics_euclidean_distance_h 3 3 4 4 // $Id$ … … 27 27 #include "AveragerPair.h" 28 28 #include "AveragerPairWeighted.h" 29 #include " vector_distance.h"29 #include "distance.h" 30 30 #include "yat/utility/iterator_traits.h" 31 31 … … 41 41 /// the Euclidean distance measure. 42 42 /// 43 struct euclidean_ vector_distance_tag44 : public vector_distance_tag43 struct euclidean_distance_tag 44 : public distance_tag 45 45 { 46 46 /// \brief tag for euclidean distance 47 typedef euclidean_ vector_distance_tag distance;47 typedef euclidean_distance_tag distance; 48 48 }; 49 49 … … 55 55 /// 56 56 template <typename Iter1, typename Iter2> 57 double vector_distance(Iter1 beg1,Iter1 end1, Iter2 beg2,58 const euclidean_ vector_distance_tag& disttype,57 double distance(Iter1 beg1,Iter1 end1, Iter2 beg2, 58 const euclidean_distance_tag& disttype, 59 59 utility::unweighted_type) 60 60 { … … 71 71 /// 72 72 template <typename Iter1, typename Iter2> 73 double vector_distance(Iter1 beg1, Iter1 end1, Iter2 beg2,74 const euclidean_ vector_distance_tag& disttype,73 double distance(Iter1 beg1, Iter1 end1, Iter2 beg2, 74 const euclidean_distance_tag& disttype, 75 75 utility::weighted_type) 76 76 { -
trunk/yat/statistics/pearson_distance.h
r1030 r1031 1 #ifndef theplu_yat_statistics_pearson_ vector_distance_h2 #define theplu_yat_statistics_pearson_ vector_distance_h1 #ifndef theplu_yat_statistics_pearson_distance_h 2 #define theplu_yat_statistics_pearson_distance_h 3 3 4 4 // $Id$ … … 25 25 */ 26 26 27 #include " vector_distance.h"27 #include "distance.h" 28 28 29 29 #include "AveragerPair.h" … … 40 40 /// the Pearson distance measure. 41 41 /// 42 struct pearson_ vector_distance_tag43 : public vector_distance_tag42 struct pearson_distance_tag 43 : public distance_tag 44 44 { 45 45 /// \brief tag for pearson distance 46 typedef pearson_ vector_distance_tag distance;46 typedef pearson_distance_tag distance; 47 47 }; 48 48 … … 54 54 /// 55 55 template <class Iter> 56 double vector_distance(Iter beg1,Iter end1, Iter beg2,57 const pearson_ vector_distance_tag& disttype,56 double distance(Iter beg1,Iter end1, Iter beg2, 57 const pearson_distance_tag& disttype, 58 58 utility::unweighted_type) 59 59 { … … 69 69 /// 70 70 template <class Iter> 71 double vector_distance(Iter beg1,Iter end1, Iter beg2,72 const pearson_ vector_distance_tag& disttype,71 double distance(Iter beg1,Iter end1, Iter beg2, 72 const pearson_distance_tag& disttype, 73 73 utility::weighted_type) 74 74 {
Note: See TracChangeset
for help on using the changeset viewer.