当前位置:   article > 正文

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

模糊c均值聚类pythoncsdn

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

k均值聚类

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

模糊c均值均类

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

实现步骤:

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

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

实现

各个相关函数都有注释。

  1. #include <time.h>
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. #include <math.h>
  5. typedef struct{
  6. double x;
  7. double y;
  8. } Position;
  9. //随机生成二维数据点
  10. //len:节点数量
  11. //range:节点x、y值的范围
  12. Position *randomPosition(int len, int range){
  13. srand((unsigned)time(NULL));
  14. Position *allPos = (Position *)malloc(len * sizeof(Position));
  15. short a = 1; //人为差异量
  16. for (int i = 0; i < len; ++i)
  17. {
  18. if (a)
  19. {
  20. allPos[i].x = (double)rand() / 2147483647 * range;
  21. allPos[i].y = (double)r
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/702507
推荐阅读
相关标签
  

闽ICP备14008679号