当前位置: 首页 > news >正文

软聚类算法:模糊聚类 (Fuzzy Clustering)

前言

如果你对这篇文章感兴趣,可以点击「【访客必读 - 指引页】一文囊括主页内所有高质量博客」,查看完整博客分类与对应链接。

在介绍模糊聚类之前,我们先简单地列举一下聚类算法的常见分类:

  • 硬聚类 (Hard Clustering)
    • Connectivity-based clustering (Hierarchical Clustering)
    • Centroid-based Clustering (k-means clustering)
    • Distribution-based Clustering (Gaussian Mixture Model)
    • Density-based Clusterin (DBSCAN)
  • 软聚类 (Soft Clustering)
    • Fuzzy Clustering

我们之前听说的大部分聚类算法均为硬聚类,即要求每个数据点只能属于一个特定的簇,scikit-learn 中有关于常见硬聚类算法的可视化展示,可供参考:

请添加图片描述

不同于硬聚类,软聚类放松了限制,即允许数据点可以同时属于多个簇。接下来要介绍的模糊聚类即为一种常见的软聚类算法。


模糊聚类

模糊聚类通常用一个向量来表示一个数据点的归属,向量中哪个维度的数值更大,意味着该数据点距离该维度对应簇更近,也可以理解为是归属于该簇的概率越大。

以 Fuzzy c-means (FCM) 聚类算法为例,其过程与 k-means 非常相似:

  • 选择 CCC 作为簇个数
  • 随机赋予每个点归属于各个簇的概率向量 {wi}i=1N{\{\boldsymbol{w}_i\}}_{i=1}^N{wi}i=1N
  • 迭代至收敛
    • 重新计算每个簇的簇中心 {ck}k=1C{\{\boldsymbol{c}_k\}}_{k=1}^C{ck}k=1C
    • 重新计算每个点归属于各个簇的概率向量 {wi}i=1N{\{\boldsymbol{w}_i\}}_{i=1}^N{wi}i=1N

簇中心 ck\boldsymbol{c}_kck 计算式如下:
ck=∑i=1Nwi,kmxi∑i=1Nwi,km,\boldsymbol{c}_k=\frac{\sum_{i=1}^N w_{i,k}^m \boldsymbol{x}_i}{\sum_{i=1}^N w_{i,k}^m }, ck=i=1Nwi,kmi=1Nwi,kmxi,

其中 m∈(1,∞)m\in (1,\infty)m(1,) 为超参,控制聚类的模糊程度,其数值越大,聚类结果越模糊,其数组越逼近 111, 其聚类效果越接近 k-means。

数据点 xi\boldsymbol{x}_ixi 的概率向量 wi\boldsymbol{w}_iwi 计算式如下:
wi,k=1∑j=1C(∥xi−ck∥∥xi−cj∥)2m−1,w_{i,k}=\frac{1}{\sum_{j=1}^C \left(\frac{\left\|\boldsymbol{x}_i-\boldsymbol{c}_k\right\|}{\left\|\boldsymbol{x}_i-\boldsymbol{c}_j\right\|}\right)^{\frac{2}{m-1}}}, wi,k=j=1C(xicjxick)m121,

其满足 ∑k=1Cwi,k=1\sum_{k=1}^C w_{i,k}=1k=1Cwi,k=1。FCM 整个聚类过程想要最小化的目标函数如下所示:
J(W,C)=∑i=1N∑k=1Cwi,km∥xi−ck∥2.J(\boldsymbol{W}, \boldsymbol{C})=\sum_{i=1}^N \sum_{k=1}^C w_{i,k}^m\left\|\boldsymbol{x}_i-\boldsymbol{c}_k\right\|^2. J(W,C)=i=1Nk=1Cwi,kmxick2.


参考资料

  • wiki - Fuzzy clustering
  • scikit-learn clustering
http://www.lryc.cn/news/31667.html

相关文章:

  • Java Web 实战 02 - 多线程基础篇(1)
  • C/C++开发,无可避免的多线程(篇三).协程及其支持库
  • 高级信息系统项目管理(高项 软考)原创论文项目背景合集
  • 锁屏面试题百日百刷-Hive篇(十一)
  • 一看就懂,等保2.0工作流程这么做
  • Kerberos 域委派攻击之非约束性委派
  • 【容器运行时】一文理解 OCI、runc、containerd、docker、shim进程、cri、kubelet 之间的关系
  • spark兼容性验证
  • docker逃逸复现--pid=host模式下的逃逸
  • 【环境配置】Windows系统下搭建Pytorch框架
  • Dockerfile简单使用入门
  • 什么是CCC认证3C强制认证机构
  • C语言-基础了解-18-C共用体
  • Vue基础18之github案例、vue-resource
  • UE4 c++ Mediaplayer取消自动播放,运行时首帧为黑屏的问题
  • C语言-基础了解-17-C结构体
  • Python爬虫实践:优志愿 院校列表
  • Java框架学习 | MySQL和Maven笔记
  • C++入门教程||C++ 变量作用域||C++ 常量
  • 想找工作,这一篇15w字数+的文章帮你解决
  • Mac brew搭建php整套开发环境
  • 111 e
  • Cookie和Session
  • git上传下载
  • 如何使用码匠连接 Oracle
  • 【Git】git常用命令集合
  • 基于 WebSocket、Spring Boot 教你实现“QQ聊天功能”的底层简易demo
  • 13. 郭老师爱合并果子
  • Method breakpoints may dramatically slow down debugging 解决方案
  • ABAP ALV和OOALV设置单元格颜色,编辑