102 bool train(TTRAIN& itBegin, TTRAIN& itEnd,
103 const std::vector<unsigned int>& attributesIndices,
104 const std::vector<unsigned int>& labels,
105 const bool enableProgressInterface) ;
107 bool classify(TCLASSIFY& itBegin, TCLASSIFY& itEnd,
108 const std::vector<unsigned int>& attributesIndices,
109 std::vector<unsigned int>& classification,
110 const bool enableProgressInterface) ;
200 const std::vector<unsigned int>& attributesIndices,
201 const std::vector<unsigned int>& labels,
202 const bool enableProgressInterface)
204 std::vector<double> maxValues;
205 std::vector<double> minValues;
207 for (
unsigned int i = 0; i < attributesIndices.size(); i++)
209 maxValues.push_back(std::numeric_limits<double>::min());
210 minValues.push_back(std::numeric_limits<double>::max());
214 std::vector<unsigned int> tmpClassification;
218 tmpClassification.push_back(0);
219 for (
unsigned int i = 0; i < attributesIndices.size(); i++)
221 if ((*it)[attributesIndices[i]] > maxValues[i])
222 maxValues[i] = (*it)[attributesIndices[i]];
223 if ((*it)[attributesIndices[i]] < minValues[i])
224 minValues[i] = (*it)[attributesIndices[i]];
229 srand((
unsigned) time(0));
234 std::vector<double> newMean;
235 for (
unsigned int i = 0; i < attributesIndices.size(); i++)
238 ( maxValues[i] == minValues[i] )
240 ( ((
double)rand()) * maxValues[i] / ((
double)RAND_MAX) )
243 ( ( (
double)rand() ) / ((
double)RAND_MAX) )
245 ( maxValues[i] - minValues[i] )
254 std::vector<double> values;
255 std::map<unsigned int, std::vector<double> > tmpValues;
256 std::vector<unsigned int> tmpNs;
257 unsigned int tmpClass;
258 double distanceKMeans;
260 std::vector<std::vector<double> > oldKMeans;
263 tmpValues[k] = std::vector<double>(attributesIndices.size());
268 for (
unsigned int t = 0; t <
m_parameters.m_maxIterations; t++)
272 for (
unsigned int i = 0; i < attributesIndices.size(); i++)
273 tmpValues[k][i] = 0.0;
282 for (
unsigned int i = 0; i < attributesIndices.size(); i++)
283 values.push_back((*it)[attributesIndices[i]]);
285 for (
unsigned int i = 0; i < attributesIndices.size(); i++)
286 tmpValues[tmpClass][i] += values[i];
294 for (
unsigned int i = 0; i < attributesIndices.size(); i++)
296 m_KMeans[k][i] = (double) (tmpValues[k][i] / (
double) tmpNs[k]);
299 distanceKMeans = 0.0;
301 for (
unsigned int i = 0; i < attributesIndices.size(); i++)
303 a_minus_b =
m_KMeans[k][i] - oldKMeans[k][i];
304 distanceKMeans += a_minus_b * a_minus_b;
306 distanceKMeans = sqrt(distanceKMeans);
318 const std::vector<unsigned int>& attributesIndices,
319 std::vector<unsigned int>& classification,
320 const bool enableProgressInterface)
322 TCLASSIFY it = itBegin;
323 std::vector<double> values(attributesIndices.size());
324 classification.clear();
333 classification.resize(N);
341 for (
unsigned int i = 0; i < attributesIndices.size(); i++)
342 values[i] = (*it)[attributesIndices[i]];
bool train(TTRAIN &itBegin, TTRAIN &itEnd, const std::vector< unsigned int > &attributesIndices, const std::vector< unsigned int > &labels, const bool enableProgressInterface)
bool classify(TCLASSIFY &itBegin, TCLASSIFY &itEnd, const std::vector< unsigned int > &attributesIndices, std::vector< unsigned int > &classification, const bool enableProgressInterface)