matlab 实现模糊C均值聚类

1. 原理

模糊c均值算法步骤:

  1. 设定聚类数目c和加权指数b:

  2. 初始化各个聚类中心m

  1. 重复下面的运算,直到各个样本的隶属度值稳定:用当前的聚类中心根据下式计算隶属度函数:

用当前的隶属度函数按下式更新计算各类聚类中心:

当模糊C均值算法收敛时,就得到了各类的聚类中心和各个样本对于各类的隶属度值,从而完成了模糊聚类划分

Matlab中模糊c均值聚类函数(b=2):

Center,U,obj_fcn\]=fcm(data,cluster_n) data:要聚类的数据集合,每一行为一个样本; cluster_n:聚类数; Center:最终的聚类中心矩阵,每一行为聚类中心的坐标值; U:最终的模糊分区矩阵; obj_fcn:在迭代过程中的目标函数值。 ## 2. 过程 ### 2.1 数据集合并及可视化 ![](https://file.jishuzhan.net/article/1766375306697904130/b5b553864d385a0234325407c0343002.webp) ![](https://file.jishuzhan.net/article/1766375306697904130/0b0afe0fe36e9dcdcdca5dca27a75f79.webp) 将MALE.txt和FEMALE.txt文件合并成一个data.txt文件,在matlab中导入data文件并绘制样本点分布: ![](https://file.jishuzhan.net/article/1766375306697904130/e954d1ddadde77958077447c30247fa1.webp) 图1 初始样本点分布图 ### 2.2 模糊c均值聚类 调用MATLAB中模糊c均值聚类函数fcm实现聚类,初始设置聚类簇的个数为2,求出每个样本的最大隶属度,然后找出分别属于两类样本的点并绘制图像: ![](https://file.jishuzhan.net/article/1766375306697904130/25c3a7b11b09e597a8f2edda589c1e79.webp) 程序如上图所示,运行后聚类结果如下: ![](https://file.jishuzhan.net/article/1766375306697904130/6066cc914845adb81b39b23bc375ae75.webp) 图2 迭代过程中目标函数值 可以看出目标函数值在迭代中是不断减小的 ![](https://file.jishuzhan.net/article/1766375306697904130/9581ba2766a8571dd7348f99f61f8f57.webp) 图3 聚类结果 ![](https://file.jishuzhan.net/article/1766375306697904130/75774f01d3dfb1ea6fcdab3f3d949f31.webp) 图4 簇为2聚类结果样本点分布 为了能够寻找到更合理的聚类数目,接下来分别进行3类、4类、5类聚类 ![](https://file.jishuzhan.net/article/1766375306697904130/ceb962cdf4eef8538fd759ef6b1bff52.webp) 图5 簇个数为3 ![](https://file.jishuzhan.net/article/1766375306697904130/6a3d1f884da35e663ce6190126f9a2dd.webp) 图6 簇个数为4 ![](https://file.jishuzhan.net/article/1766375306697904130/260175bef6b24330dfe8cbe026c89abf.webp) 图7 簇个数为5 ## 3. 结果与分析 在上述实验过程中,我们成功实现了模糊c均值聚类,因为数据集是由两类样本合成的所以初始聚类簇的个数设置为2,结果如图4所示,然后从图中可以发现聚类效果似乎并非最佳,于是后续又增大了簇的个数进行多次实验,如图5到图7所示,通过观察可知聚类个数为4时或许会更加合理。在实验迭代的过程中可以了解到这种聚类的方式主要是通过优化目标函数然后得到每个样本点对所有类中心的隶属度,从而决定样本点的类属以达到自动对样本数据进行聚类的目的。同时我也通过改变聚类个数的方式去寻找更加合理的类别数。但是实验中还缺少对于聚类优劣的描述,可以通过一些聚类指标来对实验进行进一步优化。

相关推荐
TeleostNaCl12 分钟前
如何安装 Google 通用的驱动以便使用 ADB 和 Fastboot 调试(Bootloader)设备
android·经验分享·adb·android studio·android-studio·android runtime
月阳羊39 分钟前
【硬件-笔试面试题-69】硬件/电子工程师,笔试面试题(知识点:电机驱动电路的反馈电路)
java·经验分享·嵌入式硬件·面试
RickyWasYoung3 小时前
【代码】matlab-遗传算法工具箱
开发语言·matlab
一只懒洋洋4 小时前
中值滤波、方框滤波、高斯滤波、均值滤波、膨胀、腐蚀、开运算、闭运算
算法·均值算法
会飞的小蛮猪4 小时前
Jenkins运维之路(初识流水线)
经验分享
星马梦缘5 小时前
Matlab机器人工具箱使用1 简单的描述类函数
matlab·矩阵·机器人·位姿·欧拉角·rpy角
晨非辰6 小时前
#C语言——刷题攻略:牛客编程入门训练(九):攻克 分支控制(三)、循环控制(一),轻松拿捏!
c语言·开发语言·经验分享·学习方法·visual studio
TeleostNaCl7 小时前
OpenWrt | 在 PPP 拨号模式下启用 IPv6 功能
网络·经验分享·智能路由器·ip
Billy_Zuo9 小时前
人工智能机器学习——聚类
人工智能·机器学习·聚类
晓衣17 小时前
2025“獬豸杯”全国电子数据取证竞赛-k8s服务器取证wp
服务器·经验分享·程序人生·网络安全·容器·kubernetes·学习方法