VCNormalize.cpp 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. /**
  2. * @file VCNormalize.cpp
  3. // refactor-nice.pl: check this substitution
  4. // old: * @brief Vector Transform
  5. * @brief NICE::Vector Transform
  6. * @author Michael Koch
  7. * @date 11/28/2007
  8. */
  9. #include <iostream>
  10. #include <fstream>
  11. #include "vislearning/classifier/vclassifier/VCNormalize.h"
  12. #include "core/basics/FileMgt.h"
  13. #include "vislearning/math/ftransform/PCA.h"
  14. using namespace OBJREC;
  15. using namespace std;
  16. using namespace NICE;
  17. VCNormalize::VCNormalize(const Config *conf, VecClassifier * classifier)
  18. {
  19. this->classifier = classifier;
  20. this->mode = conf->gI("FTransform", "mode", 0);
  21. transformedSet.clear();
  22. }
  23. VCNormalize::~VCNormalize()
  24. {
  25. }
  26. /** classify using simple vector */
  27. ClassificationResult VCNormalize::classify(const NICE::Vector & x) const
  28. {
  29. NICE::Vector transformed_vector = getNormalizedVector(x);
  30. cerr << "VCNormalize: transformed-vector: " << transformed_vector << endl;
  31. return this->classifier->classify(transformed_vector);
  32. }
  33. void VCNormalize::teach(const LabeledSetVector & teachSet)
  34. {
  35. maxClassNo = teachSet.getMaxClassno();
  36. int n = teachSet.count();
  37. int d = teachSet.dimension();
  38. vector_max.resize(d);
  39. vector_min.resize(d);
  40. vector_span.resize(d);
  41. //get input data
  42. uint featurecount = 0;
  43. LOOP_ALL(teachSet)
  44. {
  45. EACH(classno,x);
  46. for (uint k = 0; k < x.size(); ++k)
  47. {
  48. double value = x[k];
  49. if (featurecount == 0)
  50. {
  51. vector_max[k] = value;
  52. vector_min[k] = value;
  53. }
  54. else
  55. {
  56. if (value > vector_max[k])
  57. {
  58. vector_max[k] = value;
  59. }
  60. if (value < vector_min[k])
  61. {
  62. vector_min[k] = value;
  63. }
  64. }
  65. }
  66. ++featurecount;
  67. }
  68. vector_span = vector_max - vector_min;
  69. //save transformed Vectors
  70. LOOP_ALL(teachSet)
  71. {
  72. EACH(classno,x);
  73. NICE::Vector transformed_vector=getNormalizedVector(x);
  74. cerr << "VCNormalize: transformed-vector: " << transformed_vector
  75. << endl;
  76. transformedSet.add(classno, transformed_vector);
  77. }
  78. this->classifier->teach(transformedSet);
  79. }
  80. NICE::Vector VCNormalize::getNormalizedVector(const NICE::Vector &x) const
  81. {
  82. NICE::Vector transformed_vector(x.size());
  83. for (uint k = 0; k < vector_min.size(); ++k)
  84. {
  85. if (vector_span[k] > 1e-10)
  86. {
  87. transformed_vector[k] = (x[k] - vector_min[k]) / vector_span[k];
  88. }
  89. else
  90. {
  91. transformed_vector[k] = 1.0;
  92. }
  93. }
  94. return transformed_vector;
  95. }
  96. void VCNormalize::finishTeaching()
  97. {
  98. this->classifier->finishTeaching();
  99. }
  100. void VCNormalize::restore(std::istream & is, int format)
  101. {
  102. fprintf(stderr, "NOT YET IMPLEMENTED !!\n");
  103. exit(-1);
  104. }
  105. void VCNormalize::store(std::ostream & is, int format) const
  106. {
  107. fprintf(stderr, "NOT YET IMPLEMENTED !!\n");
  108. exit(-1);
  109. }
  110. void VCNormalize::clear()
  111. {
  112. fprintf(stderr, "NOT YET IMPLEMENTED !!\n");
  113. exit(-1);
  114. }