⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 knearest.cpp

📁 k近邻算法的c++实现
💻 CPP
字号:
#include <map>
#include "knearest.h"

void Knn::run()
{
	this->init();
	this->calDist();
	this->saveKPatterns();
	this->calCluster();
}

void Knn::init()
{
	this->patterns.load(KNN);
	this->sample = this->patterns.getPattern(0);
	cout<<"enter k: ";
	cin>>this->k;
}

void Knn::calDist()
{
	double dist = 0;
	for(int i = 1; i < this->patterns.numOfPatterns; i++)
	{
		dist = this->patterns.caluDistance(this->sample, this->patterns.getPattern(i));
		this->distMap.insert(map<double, int>::value_type(dist, i));
	}
}

void Knn::saveKPatterns()
{
	char ifsave;
	cout<<"the sample has been classfied...."<<endl;
	cout<<"save the clusters?[y/n]: ";
	cin>>ifsave;
	if(ifsave=='y' || ifsave=='Y')
	{
		cout<<"input the target file name: ";
		string fileName;
		cin>>fileName;
		ofstream fout;
		fout.open(fileName.c_str(), ios::out);

		map<double,int>::iterator iter = this->distMap.begin();
		for( int i = 0; i < k; iter++,i++)
		{
			Pattern pattern = this->patterns.getPattern(iter->second);
			for(int j = 0; j < this->patterns.numOfDim; j++)
			{
				fout<<pattern[j]<<" ";
			}
			fout<<endl;
		}
		fout.close();
	}
}

int Knn::calCluster()
{
	map<int,int> countMap;
	map<int,int>::iterator iter2 = countMap.begin();
	map<double,int>::iterator iter = this->distMap.begin();
	for(int i = 0; iter != this->distMap.end() && i < k; iter++,i++)
	{
		Pattern pattern = this->patterns.getPattern(iter->second);
		int clusterId = pattern[this->patterns.numOfDim];
		if((iter2=countMap.find(clusterId)) == countMap.end())
		{
			countMap.insert(map<int,int>::value_type(clusterId,1));
		}
		else
		{
			iter2->second++;
		}
	}
	map<int,int>::iterator maxIter = countMap.begin();
	for(iter2 = countMap.begin(); iter2!=countMap.end(); iter2++)
	{
		if(iter2->second > maxIter->second)
		{
			maxIter = iter2;
		}
	}
	cout<<"the sample belongs to cluster "<<maxIter->first<<endl;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -