📄 mainprocess.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 + -