k-means-2d-rand-point.zip

  • PUDN用户
    了解作者
  • Visual C++
    开发工具
  • 27KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 1
    下载次数
  • 2016-07-04 21:15
    上传日期
K_means经典聚类算法,用点阵可视化 通过产生随机点,不断更改中心点实现聚类
k-means-2d-rand-point.zip
  • exercise k-means 2d rand point
  • bin
  • Debug
  • exercise k-means 2d rand point.exe
    34.2KB
  • obj
  • Debug
  • main.o
    7.2KB
  • c.o
    2.2KB
  • c.exe
    28.4KB
  • exercise k-means 2d rand point.layout
    317B
  • exercise k-means 2d rand point.cbp
    1.2KB
  • main.c
    4.9KB
  • exercise k-means 2d rand point.depend
    354B
  • c.c
    222B
内容介绍
//k-means 2d rand 目的:将多个二维点分堆存储,以之间距离大小为分堆依据,rand表示中心点随机产生 //问题1.有时会陷入死循环,即中心点不断的在两处跳来跳去,尤其分的堆数比较多时 //问题2.有时会有个别点分堆错误,尤其分的堆数比较多时 #include <stdio.h> #include <stdlib.h> #include <math.h> #include <time.h> #include <windows.h> #define hang 42//屏幕所能显示的最大行数 #define lie 79//屏幕所能显示的最大列数 #define max1 20//输入点个数可调 #define dui 2//要分的堆数可调 int main() { int i=0,j=0,min,flag=0,x,y;//min 标记最小距离,flag标记比较了几次,放入第几堆,x,y为随机数。分别对应横纵坐标 int a=0;//a用来记录循环的次数 int arr0[dui]={0},//分堆后每堆个数 arr1[dui][2]={{0},{0}},//每堆平均数 arr3[dui][2]={{0},{0}};//每堆的和 int center[dui][2]={{0},{0}},//中心点 arr[max1][2]={{0},{0}}, //开始输入的点的坐标 arr2[dui][max1][2];//分堆存储分好的点 char str[hang][lie],n;//n用来存储刷屏按下的键 for(i=0;i<hang;i++) for(j=0;j<lie;j++) str[i][j]='+'; for(i=0;i<hang;i++) { for(j=0;j<lie;j++) printf("%c",str[i][j]); printf("\n"); } scanf("%c",&n); if(n=='\n') system("cls"); //输入点的坐标 srand(time(0)); for(i=0;i<max1;i++) { x=rand()%hang+1; arr[i][0]=x; y=rand()%lie+1; arr[i][1]=y; str[x][y]=3; } printf("随机产生%d个点分布如下\n",max1); for(i=0;i<hang;i++) { for(j=0;j<lie;j++) printf("%c",str[i][j]); printf("\n"); } scanf("%c",&n); if(n=='\n') system("cls"); //输出起始点集坐标 // for(i=0;i<max1;i++) // { // printf("%c",40); // printf("%d,",arr[i][0]); // printf("%d",arr[i][1]); // printf("%c ",41); // } // printf("\n"); //产生随机中心点 srand(time(0)); for(i=0;i<dui;i++) { x=rand()%hang+1; center[i][0]=x; y=rand()%lie+1; center[i][1]=y; str[x][y]=15; } printf("第1次结果如下(其中%c为中心点):\n",15); for(i=0;i<hang;i++) { for(j=0;j<lie;j++) printf("%c",str[i][j]); printf("\n"); } scanf("%c",&n); if(n=='\n') system("cls"); //分堆过程,分别求到几个中心点的距离,到同一个中心点距离最小者分为同一堆 for(a=0;a<99999;a++) { //每堆个数清零,和清零,平均值可以不清零 for(i=0;i<dui;i++) arr0[i]=0; for(i=0;i<dui;i++) for(j=0;j<2;j++) arr3[i][j]=0; for(i=0;i<max1;i++) { min=sqrt(pow((arr[i][0]-center[0][0]),2)+pow((arr[i][1]-center[0][1]),2));//min 标记最小距离 //flag标记比较次数,确定分到第几堆 for(j=0,flag=0;j<dui;j++) { if(min>sqrt(pow((arr[i][0]-center[j][0]),2)+pow((arr[i][1]-center[j][1]),2))) { min=sqrt(pow((arr[i][0]-center[j][0]),2)+pow((arr[i][1]-center[j][1]),2)); flag++; } } //分入不同堆中 arr2[flag][arr0[flag]][0]=arr[i][0]; arr2[flag][arr0[flag]][1]=arr[i][1]; arr0[flag]++; } //求坐标平均值,即新的中心点 for(i=0;i<dui;i++) for(j=0;j<arr0[i];j++) { arr3[i][0]+=arr2[i][j][0]; arr3[i][1]+=arr2[i][j][1]; arr1[i][0]=arr3[i][0]/arr0[i]; arr1[i][1]=arr3[i][1]/arr0[i]; } //测试中心点是否改变,不改变跳出死循环,flag标记可检测两个及以上中心点 for(i=0,flag=0;i<dui;i++) if(arr1[i][0]==center[i][0]&&arr1[i][1]==center[i][1]) flag++; if(flag==dui) break; //中心点改变,将原中心图案还原,更新中心点 for(i=0;i<dui;i++) str[center[i][0]][center[i][1]]='+'; for(i=0;i<dui;i++) { center[i][0]=arr1[i][0]; center[i][1]=arr1[i][1]; str[center[i][0]][center[i][1]]=15; } printf("第%d次结果如下(其中%c为中心点):\n",a+2,15); for(i=0;i<hang;i++) { for(j=0;j<lie;j++) printf("%c",str[i][j]); printf("\n"); } scanf("%c",&n); if(n=='\n') system("cls"); } //输出分堆后结果 // for(i=0;i<dui;i++) // { // printf("第%d堆的点的坐标有:\n",i+1); // for(j=0;j<arr0[i];j++) // { // printf("%c",40); // printf("%d,",arr2[i][j][0]); // printf("%d",arr2[i][j][1]); // printf("%c ",41); // } // printf("\n"); // } for(i=0;i<dui;i++) for(j=0;j<arr0[i];j++) str[arr2[i][j][0]][arr2[i][j][1]]=49+i; printf("最终分堆结果如下(其中%c为中心点):\n",15); for(i=0;i<hang;i++) { for(j=0;j<lie;j++) printf("%c",str[i][j]); printf("\n"); } return 0; }
评论
    相关推荐
    • K-Means PCA降维.rar
      K-Means算法,不要求建立模型之后对结果进行新的预测,没有相应的标签,只是根据数据的特征对数据进行聚类。主成分分析降维对数据进行可视化操作,对features进行降维.
    • K-means.zip
      实现K均值聚类的功能,代码讲解较为详细且有示例,用户自行阅读
    • python-k-means.zip
      python实现K-means算法,是编程解决算法问题的初始问题
    • K-means_demo.rar
      对用户进行聚类分析和可视化呈现必须要说内部的相关资料真的很散乱,没有一个能直接用于生产环境的。注释写的很清楚了
    • k-means.zip
      K-means原理分析与算法实现,对给出的一些数据点能够实现K-means聚类并可视化
    • k-means2.zip
      简单实现了k-means算法,带可视化的gui界面,比较适合初学者上手和理解,代码注释也比较齐全。
    • kmeans-fuzzy-cmeans:k-Means 和 Fuzzy c-Means 聚类算法的可视化
      kmeans-fuzzy-cmeans k-Means 和 Fuzzy c-Means 聚类算法的可视化。 源语言是 C#,用于图形绘制的 Oxyplot 库。
    • java k-means可视化程序
      java k-means可视化程序
    • K-means.rar
      自己编写的C++语言 K-means算子
    • matlabcnhelp.rar
      matlab中文帮助很难找的,快速下载