程序代码:

#include"stdio.h"
#include"stdlib.h"
#include<iostream>
using namespace std;#define N 11
#define k 3typedef struct{float x;float y;
}Point;Point point[N] = {{ 2.0, 10.0 }, { 2.0, 5.0 }, { 8.0, 4.0 }, { 5.0, 8.0 }, {7.0,5.0},{ 6.0, 4.0 }, { 1.0, 2.0 }, { 4.0, 9.0 }, { 7.0, 3.0 }, { 1.0, 3.0 }, {3.0,9.0}
};int center[N];
Point mean[k];float getdistance(Point point1, Point point2);
void cluster();
float gete();
void getmean(int center[N]);int main()
{//初始化k个中心点,这里选择给定中心点,而不是随机生成,需要更多的先验知识//若没有相关先验知识,可选择随机生成初始中心点mean[0].x = point[0].x;mean[0].y = point[0].y;mean[1].x = point[3].x;mean[1].y = point[3].y;mean[2].x = point[6].x;mean[2].y = point[6].y;int number=0;float temp1, temp2;//第一次聚类cluster();number++;//number统计进行了几次聚类//对第一次聚类的结果进行误差平方和的计算   temp1 = gete();printf("the error1 is:%f\n", temp1);//针对第一次聚类的结果,重新计算聚类中心getmean(center);//第二次聚类cluster();number++;temp2 = gete();printf("the error2 is:%f\n", temp2);//迭代循环,直到两次迭代误差的差值在一定阈值范围内,则迭代停止while (fabs(temp1 - temp2) > 0.5){temp1 = temp2;getmean(center);cluster();temp2 = gete();number++;printf("the error%d is:%f\n", number,temp2);}printf("the total number of cluster is:%d\n", number);system("pause");return 0;}//计算距离函数,欧式距离
float getdistance(Point point1, Point point2)
{float d;d = sqrt((point1.x - point2.x)*(point1.x - point2.x) + (point1.y - point2.y)*(point1.y - point2.y));return d;
}
//聚类函数
void cluster()
{float distance[N][k];for (int i = 0; i < N; i++){for (int j = 0; j < k; j++){distance[i][j] = getdistance(point[i], mean[j]);}float min = 9999.0;for (int j = 0; j < k; j++){if (distance[i][j] < min){min = distance[i][j];center[i] = j;}}printf("(%.0f,%.0f)\t in cluster-%d\n", point[i].x, point[i].y, center[i] + 1);}
}
//聚类后误差计算函数
float gete()
{float cnt=0, sum=0;for (int i = 0; i < N; i++){for (int j = 0; j < k; j++){if (center[i] == j){cnt = getdistance(point[i], mean[j]);}}sum += cnt;     }return sum;
}//重新计算聚类中心
void getmean(int center[N])
{Point sum;int count;for (int i = 0; i < k; i++){sum.x = 0.0;sum.y = 0.0;count = 0;for (int j = 0; j < N; j++){if (center[j] == i){sum.x += point[j].x;sum.y += point[j].y;count++;}}mean[i].x = sum.x / count;mean[i].y = sum.y / count;}for (int i = 0; i < k; i++){printf("the new center point of %d is:\t(%f,%f)\n", i + 1, mean[i].x, mean[i].y);}
}

程序结果:

参考:http://blog.csdn.net/triumph92/article/details/41128049

k-means聚类算法——c语言相关推荐

  1. k means聚类算法_一文读懂K-means聚类算法

    1.引言 什么是聚类?我们通常说,机器学习任务可以分为两类,一类是监督学习,一类是无监督学习.监督学习:训练集有明确标签,监督学习就是寻找问题(又称输入.特征.自变量)与标签(又称输出.目标.因变量) ...

  2. k means聚类算法_K-Means 聚类算法 20210108

    说到聚类,应先理解聚类和分类的区别 聚类和分类最大的不同在于:分类的目标是事先已知的,而聚类则不一样,聚类事先不知道目标变量是什么,类别没有像分类那样被预先定义出来. K-Means 聚类算法有很多种 ...

  3. OpenCV官方文档 理解k - means聚类

    理解k - means聚类 目标 在这一章中,我们将了解k - means聚类的概念,它是如何工作等. 理论 我们将这个处理是常用的一个例子. t恤尺寸问题 考虑一个公司要发布一个新模型的t恤. 显然 ...

  4. k均值聚类算法(K Means)及其实战案例

    算法说明 K均值聚类算法其实就是根据距离来看属性,近朱者赤近墨者黑.其中K表示要聚类的数量,就是说样本要被划分成几个类别.而均值则是因为需要求得每个类别的中心点,比如一维样本的中心点一般就是求这些样本 ...

  5. OpenCV的k - means聚类 -对图片进行颜色量化

    OpenCV的k - means聚类 目标 学习使用cv2.kmeans()数据聚类函数OpenCV 理解参数 输入参数 样品:它应该的np.float32数据类型,每个特性应该被放在一个单独的列. ...

  6. K-Means(K均值聚类算法)

    K-Means(K均值聚类算法) 1.前言 要学习聚类算法就要知道聚类学习算法是什么,为什么要学习聚类学习聚类学习算法,有什么用途,下面就简单的做一下介绍,并且详细的说明k-means均值聚类学习算法 ...

  7. k均值聚类算法python_K均值和其他聚类算法:Python快速入门

    k均值聚类算法python This post was originally published here 这篇文章最初发表在这里 Clustering is the grouping of obje ...

  8. Thinking in SQL系列之五:数据挖掘K均值聚类算法与城市分级

    原创: 牛超   2017-02-21   Mail:10867910@qq.com 引言:前一篇文章开始不再介绍简单算法,而是转到数据挖掘之旅.感谢CSDN将我前一篇机器学习C4.5决策树算法的博文 ...

  9. 【模式识别】K均值聚类算法应用实验报告及MATLAB仿真

    一. 实验目的 1.掌握K均值聚类算法的原理和实现过程: 2.掌握K均值聚类算法的应用方法. 二. 实验内容 1.彩色图像分割 选择一幅图像,分别按三种颜色数进行彩色图像分割的结果(原图和分割图).步 ...

  10. k均值聚类算法优缺点_Grasshopper实现K均值聚类算法

    本文很长很长,有很多很多图,包含以下部分: 1.算法简介 2.如何分类平面点 3.如何分类空间点 4.如何分类多维数据 5.后记 提醒:以下内容包括:智障操作,无中生友,重复造轮子 等 1.算法简介 ...

最新文章

  1. 操作系统原理 : 非连续的内存分配,分段,页表
  2. php fpm xcache,php扩展xcache
  3. Delphi2009下编译提示“无法找到“Excel_TLB”
  4. .NET 6 Preview 6 正式发布: 关注网络开发
  5. 终极Java日志字典:开发人员最常记录的单词是什么?
  6. javaweb中报404错误
  7. java jmenu 监听_Java中用得比较顺手的事件监听
  8. iOS 全屏侧滑/UIScrollView/UISlider间滑动冲突
  9. Javascript - demo 与 捷径
  10. EMNLP 2021 | 论辩挖掘在不同领域下的应用
  11. NULL指针的奇妙之旅
  12. Algorithm:数学建模大赛(CUMCM/NPMCM)之建模历年题目类型、数据分析及官方评阅要点之详细攻略
  13. GoAhead的asp过程与goform过程浅析
  14. 51nod 1384
  15. Return value (126) was not iterable.
  16. 1. Python和Java、PHP、C、C#、C++等其他语言的对比?
  17. 在RHEL4的GNOME环境下编译安装eva0.4.1
  18. 从12306看海量并发网站架构
  19. vrf名称_VRF中央空调中是什么意思
  20. 北京地铁21号线_北京迎来地铁大动脉,设有21站,全为地下线,沿线市民幸运了...

热门文章

  1. oracle pl sql面试题,Oracle 面试题库—PL/SQL
  2. 解决电商订单与支付大数据量的解决方案
  3. 计算机网络思科平台第四章测验答案
  4. TongWeb及应用系统安全加固
  5. vulnhub之CengBox3
  6. 1N系列稳压二极管参数
  7. BZOJ4585: [Apio2016]烟火表演
  8. 如何直接用Tomcat启动项目
  9. win7 docker的受难记——exit status 255的终极解决
  10. 用zabbix监测snmptrap的主动告警功能