模糊C均值聚类算法(Fuzzy C-means)

本文探讨了模糊C均值聚类(Fuzzy C-means)与k均值聚类的区别,指出k均值聚类采用硬划分,而模糊C-means采用软划分,允许样本同时归属多个类别。模糊C-means算法通过迭代优化,更新样本的隶属度和聚类中心,直至目标函数值稳定。文章还概述了算法的实现步骤,并展示了结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模糊c均值聚类与k均值聚类区别

k均值聚类

k均值聚类的实现中,把每个样本划分到单一的类别中,亦即是每个样本只能属于一种类别,不能属于多种类别。这样的划分,称为硬划分。

模糊c均值均类

为了解决硬划分所带来的问题,因此有了称为软划分的聚类算法,这一类算法中,每个样本不再只能属于一种类别,而是对于每个样本,都有对应的隶属度数组,数组里的每一个元素代表该样本属于某种类别的程度。而该样本的隶属度数组中的总值等于1。
其目标方程以及优化的推导过程可以参照下述链接,个人认为推导过程十分详细。
模糊c均值聚类推导

实现步骤:

根据相关的推导结果,具体实现步骤如下:

  1. 初始化数据集
  2. 初始化隶属度数组
  3. 根据隶属度数组更新聚类中心
  4. 根据聚类中心更新隶属度数组
  5. 是否达到结束条件,没有达到则重复2-4步骤。

实现

各个相关函数都有注释。

#include <time.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
typedef struct{
    double x;
    double y;
} Position;

//随机生成二维数据点
//len:节点数量
//range:节点x、y值的范围
Position *randomPosition(int len, int range){
    srand((unsigned)time(NULL));
    Position *allPos = (Position *)malloc(len * sizeof(P
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值