• 大小: 2KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-03
  • 语言: C/C++
  • 标签: k-means  源代码  

资源简介

这是用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


评论

共有 条评论