计算智能——K-means聚类算法的原理和实现(C语言)

本文介绍了K-means聚类算法的定义、原理和实现过程。这是一种迭代的聚类分析算法,通过计算数据点与聚类中心的距离进行分组。在每次迭代中,算法会更新聚类中心,直到中心点不再变化,算法达到收敛。文章还提到了算法的四个主要步骤,并且讨论了其在C语言中的实现。
摘要由CSDN通过智能技术生成

计算智能——K-means聚类算法的原理和实现(C语言)

算法定义

k-means聚类算法是一种迭代求解的聚类分析算法。,
k均值聚类是最著名的划分聚类算法,由于简洁和效率使得他成为所有聚类算法中最广泛使用的。给定一个数据点集合和需要的聚类数目k,k由用户指定,k均值算法根据某个距离函数反复把数据分入k个聚类中。

算法原理

k-means算法首先选取k个点作为初始的聚类中心,然后计算各个样本到各聚类中心的距离,把每个样本归入离它最近的那个聚类中心所在的类; 调整后的新类计算新的聚类中心,如果相邻两次的聚类中心没有任何变化,这说明数据对象调整结束,聚类准则函数f已经收敛。在每次迭代过程中都要考察每个样本的分类是否正确,若不正确,就要调整。在全部数据调整完后,再修改聚类中心,进入下一次迭代。如果在某一次迭代算法中,所有的数据 对象被正确分类,则不会有调整,聚类中心也不会有任何变化,这标志着f已经收敛,算法结束。该算法可分为四个步骤

  1. 选定k个中心点,选定n个样本,输入这些样本。
  2. 为每个样本找到距离其最近的中心点(寻找组织),距离同一中心点最近的点为一个类,这样完成了一次聚类。
  3. 判断聚类前后的样本点的类别情况是否相同(及两次聚类的平方误差是否相同),如果相同,则算法结束,否则进入第四步。
  4. 针对每个类别中的样本点,计算这些样本的中心点,以此作为该类新的中心点,继续第二步。

算法流程图

这是

算法实现

       #include <stdio.h>
        #include <string.h>
        #include <stdlib.h>
        #include <math.h>
        #include <time.h>
        #define max 100
        typedef struct
        {
   
        	float x;
        	float y;
        }Point;
        Point point[max];
        Point mean[max];  ///  保存每个簇的中心点
        
        int center[max];  ///  判断每个点属于哪个簇
        int Num;
        int K;
         
        //获得两点间直线距离 
        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 getMean(int center[max])
        {
   
        	Point tep;
        	int i, j, count = 0;
        	for(i = 0; i < K; 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值