comparison src/DistanceMetric.cpp @ 197:547bea29ad89 re-minimise

Increase noise for compact types
author Chris Cannam
date Fri, 27 Feb 2015 09:07:54 +0000
parents fa005e5e0953
children 827176d3b6ec
comparison
equal deleted inserted replaced
196:fa005e5e0953 197:547bea29ad89
107 double eps = 1e-16; 107 double eps = 1e-16;
108 108
109 assert(f2.size() == f1.size()); 109 assert(f2.size() == f1.size());
110 int featureSize = static_cast<int>(f1.size()); 110 int featureSize = static_cast<int>(f1.size());
111 111
112 double minNoise = 0.0;
113 #ifdef USE_COMPACT_TYPES
114 minNoise = 1.0 / m_params.scale;
115 #endif
116
112 if (m_params.metric == Cosine) { 117 if (m_params.metric == Cosine) {
113 118
114 double num = 0, denom1 = 0, denom2 = 0; 119 double num = 0, denom1 = 0, denom2 = 0;
115 120
116 for (int i = 0; i < featureSize; ++i) { 121 for (int i = 0; i < featureSize; ++i) {
120 } 125 }
121 126
122 d = 1.0 - (num / (eps + sqrt(denom1 * denom2))); 127 d = 1.0 - (num / (eps + sqrt(denom1 * denom2)));
123 128
124 if (m_params.noise == AddNoise) { 129 if (m_params.noise == AddNoise) {
125 d += 1e-2; 130 double noise = 1e-2;
131 if (noise < minNoise) noise = minNoise;
132 d += noise;
126 } 133 }
127 if (d > 1.0) d = 1.0; 134 if (d > 1.0) d = 1.0;
128 135
129 return scaleAndTally(d); // normalisation param ignored 136 return scaleAndTally(d); // normalisation param ignored
130 } 137 }
141 sum += fabs(f1[i]) + fabs(f2[i]); 148 sum += fabs(f1[i]) + fabs(f2[i]);
142 } 149 }
143 d = sqrt(d); 150 d = sqrt(d);
144 } 151 }
145 152
146 double noise = 1e-3 * featureSize;
147 if (m_params.noise == AddNoise) { 153 if (m_params.noise == AddNoise) {
154 double noise = 1e-3 * featureSize;
155 if (noise < minNoise) noise = minNoise;
148 d += noise; 156 d += noise;
149 sum += noise; 157 sum += noise;
150 } 158 }
151 159
152 if (sum == 0) { 160 if (sum == 0) {