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

📄 nearest.cpp

📁 DNA分类
💻 CPP
字号:
// CNearest.cpp: implementation of the CNearest class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "DNAClassification.h"
#include "Nearest.h"
#include"util.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CNearest::CNearest()
{
	training = NULL;
	m_nK = 1;
}

CNearest::~CNearest()
{
	Clear();
}

BOOL CNearest::Training(double **ppSample, int *pClass, int n, int c)
{
	training=Alloc2D(n,c+1,0);
	NumTraining=n;
	NumDim=c;
	for(int i=0;i<NumTraining;i++)
	{
		for(int j=0;j<NumDim;j++)
			training[i][j]=ppSample[i][j];
		training[i][NumDim]=pClass[i];
		double dRate = (double)((double)i/NumTraining);
		ReportStatus(&dRate);
	}
	return TRUE;   
}


void CNearest::Clear()
{
	if(training)
		Delete2D(training,NumTraining);
}
//////////////////
/*BOOL CNearest::Classify(double **ppTestSample, int *pClass, int n, int c)
{
	double *distance;
	int i,j,temp,test;
	distance=new double[NumTraining];
	NumClassify=n;
	for(test=0;test<NumClassify;test++)
	{	

		for(i=0;i<NumTraining;i++){
			distance[i]=0;
			for(j=0;j<NumDim;j++)		 
				distance[i]+=(training[i][j]-ppTestSample[test][j])*(training[i][j]-ppTestSample[test][j]);							
		}		 
		temp=0;			
		for(i=1;i<NumTraining;i++)
			if(distance[i]<distance[temp])temp=i;
		pClass[test]=(int)training[temp][NumDim];
	}
	delete []distance;
	return TRUE;
}
*/
////////////////////////////
BOOL CNearest::Classify(double **ppTestSample, int *pClass, int n, int c)
{
	double *distance,maxdis;
	int i,j,*temp,*distemp,test,max,types[4];
	distance=new double[NumTraining];
	temp=new int[m_nK];
	distemp=new int[m_nK];
	for(i=0;i<4;i++)types[i]=0;
	NumClassify=n;
	for(test=0;test<NumClassify;test++)
	{	

		for(i=0;i<NumTraining;i++){
			distance[i]=0;
			for(j=0;j<NumDim;j++)		 
				distance[i]+=(training[i][j]-ppTestSample[test][j])*(training[i][j]-ppTestSample[test][j]);							
		}		 
		
		max=0;
		for(i=1;i<NumTraining;i++)
			if(distance[i]>distance[max])max=i;
		maxdis=distance[max];//
		for(i=0;i<m_nK;i++){	
			temp[i]=0;		
			for(j=1;j<NumTraining;j++)
				if(distance[j]<distance[temp[i]])temp[i]=j;
			distance[temp[i]]=maxdis;
		}//
		for(i=0;i<m_nK;i++)
			temp[i]=(int)training[temp[i]][NumDim];//temp will be the types
		for(int tFlag=0;tFlag<4;tFlag++)
			for(i=0;i<m_nK;i++)
				if(temp[i]==tFlag)types[tFlag]++;
		
		max=0;
		for(tFlag=1;tFlag<4;tFlag++)
			if(types[tFlag]>types[max])max=tFlag;
		max=types[max];//max will be the numbers of the largest nearest neighbour

		for(i=0;i<m_nK;i++)
			if(types[temp[i]]==max)distemp[i]=max;
		for(i=0;i<m_nK;i++)if(distemp[i]==max){
				//max=i;
				break;
		}
		pClass[test]=temp[i];
	}
	delete []distance;
	return TRUE;
}

⌨️ 快捷键说明

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