资源简介
用C++编写的基于层次的聚类算法中的CURE算法
代码片段和文件信息
/****************************************************************************
* *
* CURE *
* *
*****************************************************************************/
#include
#include
#include
#include
#include
#include
#define SUCCESS 1
#define FAILURE 0
#define TRUE 1
#define FALSE 0
#define NUMPATTERNS 10 // 数据点的个数
#define SIZEVECTOR 2 // 数据集的维数
#define NUMCLUSTERS 2 // 类的个数
#define NUMPRE 3 // 代表点个数
#define SHRINK 0.5 // 收缩率
// ***** 定义结构和类 *****
struct ClustNode {
int Member[NUMPATTERNS]; //类中的数据项
int NumMembers;
double Means[SIZEVECTOR]; //均值点
double Pre[NUMPRE][SIZEVECTOR];//代表点
int PreMember[NUMPRE];//作为代表点的数据项
int closet; //最近的簇
double MinDist;//与最近的簇之间的距离
};
class System {
private:
double Pattern[NUMPATTERNS][SIZEVECTOR];
ClustNode *p[NUMPATTERNS];
void BuildClustList(); //建立初始簇链表
ClustNode * Merge(ClustNode *ClustNode *); //合并两个簇
int MinClust(); //找到最近的两个簇
double dist(ClustNode*ClustNode *);//两个簇之间的最短距离
double EucNorm(double *double *);//代表点之间的距离
void ShrinkPre(ClustNode *); //收缩代表点
public:
System();
~System();
int LoadPatterns(char *fname); // 处理数据集
void RunCure(); // 聚类的过程
void ShowClusters(); // 显示聚类结果
};
System::System()
{
}
System::~System()
{
int i;
for(i=0;i if(p[i]==NULL)
continue;
else
delete p[i];
}
}
int System::LoadPatterns(char *fname){
int ijlen;
char buff[300];
char *ptr*ptr1;
ifstream infile(fnameios::in); //将fname打开作为输入
if(!infile){
cout<<“不能打开输入文件:\n“;
return FAILURE;
}
for(i=0; i infile.getline(buff300); //将300个字符传入buff中,buff是指针
len=0;
ptr=buff;
for (j=0; j ptr1=strchr(ptr‘‘); //找出sptr指向的字符串中第一次出现““的位置
*ptr1=‘\0‘;
Pattern[i][j]=atof(ptr); //将ptr指向的字符串转化为浮点数
len=strlen(ptr);
ptr=ptr+len+1;
} /* endfor */
} /* endfor */
infile.close();
return SUCCESS;
}
void System::BuildClustList(){
int ij;
double MinDistd;
for(i=0;i p[i]=new ClustNode;
p[i]->NumMembers=1;
p[i]->Member[0]=i;
p[i]->PreMember[0]=i;
for(j=0;j p[i]->Means[j]=Pattern[i][j];//均值
}
for(j=0;j p[i]->Pre[0][j]=Pattern[i][j]+(SHRINK)*(p[i]->Means[j]-Pattern[i][j]);//计算代表点
}
}
for(i=0;i p[i]->MinDist=9.9e+99;
for(j=0;j
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 6915 2013-05-24 20:57 CURE算法\cure\cure.cpp
文件 3377 2013-05-24 20:55 CURE算法\cure\CURE.dsp
文件 516 2013-05-24 20:57 CURE算法\cure\CURE.dsw
文件 58368 2013-05-24 20:57 CURE算法\cure\CURE.ncb
文件 198069 2013-05-24 21:06 CURE算法\cure\cure.obj
文件 48640 2013-05-24 20:57 CURE算法\cure\CURE.opt
文件 1196 2013-05-24 20:57 CURE算法\cure\CURE.plg
文件 241708 2013-05-24 20:57 CURE算法\cure\Debug\CURE.exe
文件 23008 2013-05-24 20:57 CURE算法\cure\Debug\cure.obj
文件 607232 2013-05-24 20:57 CURE算法\cure\Debug\CURE.pdb
文件 69632 2013-05-24 20:57 CURE算法\cure\Debug\vc60.pdb
文件 75 2013-05-11 09:39 CURE算法\cure\iris.data
文件 98 2013-05-24 18:48 CURE算法\cure\Project1.bpf
文件 3109 2013-05-24 18:48 CURE算法\cure\Project1.bpr
文件 30720 2013-05-24 21:06 CURE算法\cure\Project1.exe
文件 876 2013-05-24 18:06 CURE算法\cure\Project1.res
文件 393216 2013-05-24 21:06 CURE算法\cure\Project1.tds
目录 0 2013-06-05 11:34 CURE算法\cure\Debug
目录 0 2013-06-05 11:34 CURE算法\cure
目录 0 2013-06-04 09:59 CURE算法
----------- --------- ---------- ----- ----
1686755 20
评论
共有 条评论