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

📄 mainprocess.cpp

📁 该程序包实现了三个模式识别的聚类算法
💻 CPP
字号:
/* 该程序实现了K-means、LVQ2、GLVQ模式识别聚类算法 */
#include "stdlib.h"
#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;
#include "global.h"

int main ()
{
	int i, j, k;
	int m, n;
	int numClass, numFeature;
	DOUBLE mean, right, total, max;
	char* trainFileName = "D:/Cpgm/testData/sat-train.data";//数据集的路径
	char* testFileName = "D:/Cpgm/testData/sat-test.data";//数据集的路径
	//clustering 算法测试
	cout << "clustering:"<<endl;
	for (n=1; n<6; n++)//n=1---5  表示聚类中心的数目分别为1--5
	{
		//cout<<endl;
		CClustering cClustering;
		cClustering.num = n;//
		cClustering.train(trainFileName);
		numClass = cClustering.sdata.numClass;
		numFeature = cClustering.sdata.numFeature;
		//cout<<"类别数:"<<numClass<<endl;
		//cout<<"特征数:"<<numFeature<<endl;
		cClustering.test(testFileName);
		//cout<<"num="<<cClustering.num<<endl;
		right = 0;
		total = 0;
		for (i=0; i<numClass; i++)
		{
			//cout<<cClustering.sdata.nameClass[i]<<" total:"<<cClustering.resultTotal[i]<<" right:"<<cClustering.resultRight[i]<<"  %:"<<cClustering.resultRight[i]*100/cClustering.resultTotal[i]<<endl;
			right += cClustering.resultRight[i];
			total += cClustering.resultTotal[i];
		}
		cout<<"num:"<<cClustering.num <<" mean:"<<100*right/total<<endl;
	}
	//lvq2 算法测试   //注:先聚类,然后再用LVQ
	cout << "lvq2:"<<endl;
	for (m=0; m<1; m++)
	{
	DOUBLE sum = 0;
	for (n=1; n<6; n++)
	{
		//cout<<endl;
		CLvq2 cLvq2;
		cLvq2.num = n;//
		cLvq2.alpha0 = 0.002;//((DOUBLE)m)/1000;  //注1:此参数需要调节
		cLvq2.train(trainFileName);
		numClass = cLvq2.sdata.numClass;
		numFeature = cLvq2.sdata.numFeature;
		//cout<<"类别数:"<<numClass<<endl;
		//cout<<"特征数:"<<numFeature<<endl;
		cLvq2.test(testFileName);
		//cout<<"num="<<cLvq2.num<<endl;
		//cout<<"alpha0="<<cLvq2.alpha0<<endl;
		right = 0;
		total = 0;
		for (i=0; i<numClass; i++)
		{
			//cout<<cLvq2.sdata.nameClass[i]<<" total:"<<cLvq2.resultTotal[i]<<" right:"<<cLvq2.resultRight[i]<<"  %:"<<cLvq2.resultRight[i]*100/cLvq2.resultTotal[i]<<endl;
			right += cLvq2.resultRight[i];
			total += cLvq2.resultTotal[i];
		}
		sum += 100*right/total;
		cout<<"num:"<<cLvq2.num<<" alpha0:"<<cLvq2.alpha0 <<" mean:"<<100*right/total<<endl;
	}
	//cout<<"alpha0:"<<((DOUBLE)m)/1000<<" mean:"<<sum/5<<endl;
	}
	//lvq 算法测试  //注:单独使用LVQ
	cout << "lvq:"<<endl;
	for (m=0; m<1; m++)
	{
		DOUBLE sum = 0;
	for (n=1; n<6; n++)
	{
		//cout<<endl;
		CLvq cLvq;
		cLvq.num = n;//
		cLvq.alpha0 = 0.008;//((DOUBLE)m)/100;    //注1:此参数需要调节
		cLvq.train(trainFileName);
		numClass = cLvq.sdata.numClass;
		numFeature = cLvq.sdata.numFeature;
		//cout<<"类别数:"<<numClass<<endl;
		//cout<<"特征数:"<<numFeature<<endl;
		cLvq.test(testFileName);
		//cout<<"num="<<cLvq.num<<endl;
		//cout<<"alpha0="<<cLvq.alpha0<<endl;
		right = 0;
		total = 0;
		for (i=0; i<numClass; i++)
		{
			//cout<<cLvq.sdata.nameClass[i]<<" total:"<<cLvq.resultTotal[i]<<" right:"<<cLvq.resultRight[i]<<"  %:"<<cLvq.resultRight[i]*100/cLvq.resultTotal[i]<<endl;
			right += cLvq.resultRight[i];
			total += cLvq.resultTotal[i];
		}
		sum += 100*right/total;
		cout<<"num:"<<cLvq.num<<" alpha0:"<<cLvq.alpha0 <<" mean:"<<100*right/total<<endl;
	}
	//cout<<"alpha0:"<<((DOUBLE)m)/100<<" mean:"<<sum/5<<endl;
	}
	//glvq2 算法测试  //注:先聚类,然后再用GLVQ
	cout << "glvq2:"<<endl;
	for (m=0; m<1; m++)
	{
		DOUBLE sum = 0;
	for (n=1; n<6; n++)
	{
		//cout<<endl;
		CGlvq2 cGlvq2;
		cGlvq2.num = n;//
		cGlvq2.alpha0 = 0.002;//((DOUBLE) m)/10000;   //注1:此参数需要调节
		cGlvq2.train(trainFileName);
		numClass = cGlvq2.sdata.numClass;
		numFeature = cGlvq2.sdata.numFeature;
		//cout<<"类别数:"<<numClass<<endl;
		//cout<<"特征数:"<<numFeature<<endl;
		cGlvq2.test(testFileName);
		//cout<<"num="<<cGlvq2.num<<endl;
		//cout<<"alpha0="<<cGlvq2.alpha0<<endl;
		right = 0;
		total = 0;
		for (i=0; i<numClass; i++)
		{
			//cout<<cGlvq2.sdata.nameClass[i]<<" total:"<<cGlvq2.resultTotal[i]<<" right:"<<cGlvq2.resultRight[i]<<"  %:"<<cGlvq2.resultRight[i]*100/cGlvq2.resultTotal[i]<<endl;
			right += cGlvq2.resultRight[i];
			total += cGlvq2.resultTotal[i];
		}
		sum += 100*right/total;
		cout<<"num:"<<cGlvq2.num<<" alpha0:"<<cGlvq2.alpha0 <<" mean:"<<100*right/total<<endl;
	}
	//cout<<"alpha0:"<<((DOUBLE) m)/10000<<" mean:"<<sum/5<<endl;
	}
	//glvq 算法测试   //注:单独使用GLVQ
	cout << "glvq:"<<endl;
	for (m=0; m<1; m++)
	{
		DOUBLE sum = 0;
	for (n=1; n<6; n++)
	{
		//cout<<endl;
		CGlvq cGlvq;
		cGlvq.num = n;//
		cGlvq.alpha0 = 0.008;//((DOUBLE)m)/1000;   //注1:此参数需要调节
		cGlvq.train(trainFileName);
		numClass = cGlvq.sdata.numClass;
		numFeature = cGlvq.sdata.numFeature;
		//cout<<"类别数:"<<numClass<<endl;
		//cout<<"特征数:"<<numFeature<<endl;
		cGlvq.test(testFileName);
		//cout<<"num="<<cGlvq.num<<endl;
		//cout<<"alpha0="<<cGlvq.alpha0<<endl;
		right = 0;
		total = 0;
		for (i=0; i<numClass; i++)
		{
			//cout<<cGlvq.sdata.nameClass[i]<<" total:"<<cGlvq.resultTotal[i]<<" right:"<<cGlvq.resultRight[i]<<"  %:"<<cGlvq.resultRight[i]*100/cGlvq.resultTotal[i]<<endl;
			right += cGlvq.resultRight[i];
			total += cGlvq.resultTotal[i];
		}
		sum += 100*right/total;
		cout<<"num:"<<cGlvq.num<<" alpha0:"<<cGlvq.alpha0 <<" mean:"<<100*right/total<<endl;
	}
	//cout<<"alpha0:"<<((DOUBLE)m)/1000<<" mean:"<<sum/5<<endl;
	}
	//dataTransform("D:/Cpgm/testData/newVowel.data");
	return 0;
}

⌨️ 快捷键说明

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