資源簡介
用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
評論
共有 條評論