示例#1
0
static std::vector<double> computeKMeans(
	KMdata & datapoints,
	uint64_t const k,
	uint64_t const runs,
	bool const debug
	)
{
	KMterm const term(runs, 0, 0, 0, 0.10, 0.10, 3, 0.50, 10, 0.95);
	datapoints.buildKcTree();
	KMfilterCenters ctrs(k, datapoints);
	KMlocalHybrid kmAlg(ctrs, term);
	ctrs = kmAlg.execute();

	std::vector<double> centrevector;
	for ( uint64_t i = 0; i < k; ++i )
	{
		centrevector.push_back(ctrs[i][0]);
		if ( debug )
			std::cerr << "centre[" << i << "]=" << ctrs[i][0] << std::endl;
	}

	std::sort(centrevector.begin(),centrevector.end());
	
	return centrevector;
}
示例#2
0
int 
CVML_API 
doKMeans(int dim, int k, int numofSamples, std::vector<std::vector<double>>& _samples,std::vector<std::vector<double>> & center)
{
	typedef double T;
	
	center.clear();
	center.resize(k);

	try{
		// execution parameters (see KMterm.h and KMlocal.h)
		KMterm  term(100, 0, 0, 0,              // run for 100 stages
			0.10, 0.10, 3,             // other typical parameter values 
			0.50, 10, 0.95);

		//int		dim	= 1;			             // dimension
		int		nPts	= numofSamples;			// number of data points
		KMdata dataPts(dim, nPts);			// allocate data storage
		//KMdata *dataPts = new KMdata(dim, nPts);

		for ( unsigned int i = 0 ; i < numofSamples ; i++ ){
			for(int j=0;i<dim;j++){
				dataPts[i][j] = _samples[i][j];
			}
		}

		dataPts.buildKcTree();			// build filtering structure
		KMfilterCenters ctrs(k, dataPts);		// allocate centers

		// run the algorithm
		//KMlocalLloyds       kmAlg(ctrs, term);	// repeated Lloyd's
		// KMlocalSwap      kmAlg(ctrs, term);	// Swap heuristic
		// KMlocalEZ_Hybrid kmAlg(ctrs, term);	// EZ-Hybrid heuristic
		
		KMlocalHybrid    kmAlg(ctrs, term);	// Hybrid heuristic
		ctrs = kmAlg.execute();			// execute


		for ( unsigned int i = 0 ; i < k ; i++ ){
			for(int j=0;i<dim;j++){
				T v =  static_cast<T>(ctrs[i][j]);
				center[i].push_back(v);
			}
		}

		return 1;
	}
	catch(...)
	{
		//cvml::TRACK("doKMeans error \n");
		return 0;
	}

	return 1;
}
示例#3
0
vector<DataPoint> SpeechKMeans::WeightedKMeans(vector<DataPoint> &points, 
                                               vector<double> &weights, int k) {

  
  KMterm term(100, 0, 0, 0, // run for 100 stages
              0.10, 0.10, 3, // other typical parameter values
              0.50, 10, 0.95);
  int dim = problems_.num_features(); // dimension
  int nPts = points.size(); // number of data points
  KMdata dataPts(dim, nPts); // allocate data storage
  for (int p = 0; p < nPts; ++p) {
    dataPts[p] = new double[dim];
    for (int i = 0; i < dim; ++i) {
      dataPts[p][i] = points[p][i];
    }
  }
  //kmUniformPts(dataPts.getPts(), nPts, dim); // generate random points
  dataPts.buildKcTree(); // build filtering structure
  KMfilterCenters ctrs(k, dataPts); // allocate centers
  // run the algorithm
  //KMlocalLloyds kmAlg(ctrs, term); // repeated Lloyd's
  // KMlocalSwap kmAlg(ctrs, term); // Swap heuristic
  // KMlocalEZ_Hybrid kmAlg(ctrs, term); // EZ-Hybrid heuristic
  KMlocalHybrid kmAlg(ctrs, term); // Hybrid heuristic
  ctrs = kmAlg.execute(); // execute
  // print number of stages
  cout << "Number of stages: " << kmAlg.getTotalStages() << "\n";
  // print average distortion
  cout << "Average distortion: " << ctrs.getDist(false)/nPts << "\n";
  ctrs.print(); // print final centers

  cerr << "copying points" << endl;
  vector<DataPoint> results(k); 
  for (int j = 0; j < k; ++j) {
    results[j].resize(dim);
    for (int i = 0; i < dim; ++i) {
      results[j][i] = ctrs.getCtrPts()[j][i];
    }
  }
  cerr << "done copying points" << endl;
  return results;
}
示例#4
0
int 
CVML_API 
doKMeans(int dim, int k, int numofSamples, const double * _samples, double*& center)
{
	typedef double T;

	if(center)
	{
		delete [] center;
		center=0;
	}
	center = new T[k*dim];
	memset( center,0,sizeof(T)*k*dim );


	try{
		// execution parameters (see KMterm.h and KMlocal.h)
		KMterm  term(100, 0, 0, 0,              // run for 100 stages
			0.10, 0.10, 3,             // other typical parameter values 
			0.50, 10, 0.95);

		//int		dim	= 1;			             // dimension
		int		nPts	= numofSamples;			// number of data points
		KMdata dataPts(dim, nPts);			// allocate data storage
		//KMdata *dataPts = new KMdata(dim, nPts);

		for ( unsigned int i = 0 ; i < numofSamples ; i++ ){
			for(int j=0;i<dim;j++){
				int idx = i * dim + j;
				dataPts[i][j] = _samples[idx];
			}
		}

		dataPts.buildKcTree();			// build filtering structure
		KMfilterCenters ctrs(k, dataPts);		// allocate centers

		// run the algorithm
		//KMlocalLloyds       kmAlg(ctrs, term);	// repeated Lloyd's
		// KMlocalSwap      kmAlg(ctrs, term);	// Swap heuristic
		// KMlocalEZ_Hybrid kmAlg(ctrs, term);	// EZ-Hybrid heuristic
		
		KMlocalHybrid    kmAlg(ctrs, term);	// Hybrid heuristic
		ctrs = kmAlg.execute();			// execute


		for ( unsigned int i = 0 ; i < k ; i++ ){
			for(int j=0;i<dim;j++){
				int idx = i * dim + j;
				center[idx] = static_cast<T>(ctrs[i][j]);
			}
		}

		return 1;
	}
	catch(...)
	{
		//cvml::TRACK("doKMeans error \n");
		return 0;
	}

	return 1;
}