K-Means聚类算法的实现(C语言)

一、什么是 K-Means?
K-means算法是很典型的基于距离的聚类算法,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。该算法认为簇是由距离靠近的对象组成的,因此把得到紧凑且独立的簇作为最终目标。它是数据点到原型的某种距离作为优化的目标函数,利用函数求极值的方法得到迭代运算的调整规则。K-means算法以欧式距离作为相似度测度,它是求对应某一初始聚类中心向量V最优分类,使得评价指标J最小。算法采用误差平方和准则函数作为聚类准则函数。

二、K-Means的算法流程
(1) 从 n个数据对象任意选择 k 个对象作为初始聚类中心;
(2) 根据每个聚类对象的均值(中心对象),计算每个对象与这些中心对象的距离;并根据最小距离重新对相应对象进行划分;
(3) 重新计算每个(有变化)聚类的均值(中心对象);
(4) 循环(2)到(3)直到每个聚类不再发生变化为止。
k-means 算法接受输入量 k ;然后将n个数据对象划分为 k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。聚类相似度是利用各聚类中对象的均值所获得一个"中心对象"(引力中心)来进行计算的。

三、代码实现(C语言)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
 
#define N 11
#define K 3
 
typedef struct
{
   
	float x;
	float y;
}Point;
 
int center[N];  ///  判断每个点属于哪个簇
 
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}
};
 
Point mean[K];  ///  保存每个簇的中心点
 
float getDistance(Point point1, Point point2)
{
   
	float d;
	d = sqrt((point1.x - point2.x) * (point1.x -
  • 1
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值