资源简介
这是用C++实现的普通K-means算法,附带iris.dat数据集
k-means 源代码 C++实现 C++ k均值
代码片段和文件信息
#include
#include
#include
#include
#include
#include
using namespace std;
#define NA 4
#define K 3
#define PS 150
#define PC 0.5
#define ED 0.0000001
#define GeneNum 50
int xxx;
typedef struct
{
double p[NA];
double distance[K];
}Point;
Point instance[PS];
typedef struct
{
Point clustercenter[K];
}Pop;
Pop pop; //聚类中心
int cluster[K][PS];
int clusternum[K];
double clustermean[K];
double innerdistance;
double oldinnerdistance;
double btdistance;
double fitness;
void input()//读入待聚类数据
{
fstream fin(“iris.data“);
int i;
int j;
string line;
double word;
for(i=0;getline(finline)&&i {
istringstream stream(line);
for(j=0;stream>>word&&j {
instance[i].p[j]=word;
}
}
}
int find(int a[]int nint b)
{
int ii;
for(ii=0;ii if(a[ii]==b) return 1;
return 0;
}
void sort(int a[]int n)//冒泡排序
{
int temp;
int ij;
for(i=0;i for(j=0;j {
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
void init()
{
int ij;
int num=0;
int random;
int rt[K];
srand(time(NULL));
for(;num {
random=rand()%PS;
if(!find(rtnumrandom))
rt[num++]=random;
}
sort(rtK);
for(i=0;i for(j=0;j {
pop.clustercenter[i].p[j]=instance[rt[i]].p[j];
}
}
void printfpop()
{
int ijk;
cout<<“个体“< for(j=0;j {
cout<<“(“;
for(k=0;k {
cout< }
cout<<“) “;
}
printf(“ 准则函数值为:%4.5f\n“fitness);
}
double eucliddistance(int xint y)
{
int i;
double distance=0;
for(i=0;i {
distance+=pow((instance[x].p[i]-pop.clustercenter[y].p[i])2);
}
distance=sqrt(distance);
return distance;
}
void calcuatedistance()
{
int ij;
for(i=0;i for(j=0;j {
instance[i].distance[j]=eucliddistance(ij);
}
}
void Cluster()
{
int ijkl;
double min;
double count[NA];
int index;
for(k=0;k clusternum[k]=0;
for(i=0;i {
index=0;
min=instance[i].distance[0];
for(j=1;j {
if(instance[i].distance[j] {
min=instance[i].distance[j];
index=j;
}
}
cluster[index][clusternum[index]++]=i;
}
oldinnerdistance=innerdistance;
innerdistance=0.0;
for(i=0;i {
for(j=0;j innerdistance+=pow(instance[cluster[i][j]].distance[i]2);
}
fitness=1/(1+innerdistance);
}
vo
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3859 2010-05-06 09:39 k-means.cpp
文件 2702 2010-04-16 16:15 iris.data
----------- --------- ---------- ----- ----
6561 2
相关资源
- 操作系统 内存分配与回收 C语言模拟
- 分支定界算法C语言实现源程序
- systemverilog验证 张春 源代码 http://ch
- 二维FDTD with pml源代码
- 飞机订票系统C语言
- C++ Primer Plus第6版 源代码+练习答案
- C++数据结构与算法源代码第四版清华
- 九轴姿态解算源代码 C语言
- IPMSG飞鸽传书源代码,linux-c语言,有
- datamatrix解码c源代码
- 灰度预测模型C语言源代码
- VC实现TCP数据包发送(挺好的源代码)
- 图像分割和边缘检测完全C语言源代码
- B-树和B+树的源代码
- C语言直接读写DWG文件源代码
- 分子模拟-从算法到应用的C++源代码
- C语言实现调度算法源代码-山东大学操
- 超市管理系统C源代码
- 画多边形C++算法源代码
- 灭火机器人代码
- vc++著名的木马程序BO2000源代码.rar
- 推箱子游戏用C语言在VC++6.0下编写
- 贝叶斯抠图C++源代码
- C语言解码JPG图片源代码
- Thinking in C++ 源代码
- GPS卫星定位-实时位置计算程序-VC++源
- 超全的网络爬虫资料含源代码c++
- 常用数据校验源代码CRC8 CRC16 和校验
- c语言银行系统源代码(改进版)
- vc++编写的界面源代码
评论
共有 条评论