前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Matlab实现模糊聚类分析

Matlab实现模糊聚类分析

作者头像
用户9925864
发布2022-07-27 08:48:25
9420
发布2022-07-27 08:48:25
举报
文章被收录于专栏:算法工程师的学习日志

模糊均值聚类(FCM)是用隶属度确定每个数据点属于某个聚类的程度的一种聚类算法。1973年,Bezdek提出了该算法,作为早期硬均值聚类(HCM)方法的一种改进。FCM把 n 个向量 xi(i=1,2,…,n)分为 c 个模糊组,并求每组的聚类中心,使得非相似性指标的价值函数达到最小。FCM 使得每个给定数据点用值在 0,1 间的隶属度来确定其属于各个组的程度。与引入模糊划分相适应,隶属矩阵 U 允许有取值在 0,1 间的元素。不过,加上归一化规定,一个数据集的隶属度的和总等于 1:

那么,FCM的价值函数(或目标函数):

这里 uij 介于 0,1 间;ci 为模糊组 i 的聚类中心,dij=||ci-xj||为第 i 个聚类中心与第 j 个数据点间的欧几里德距离;且 m (属于1到无穷) 是一个加权指数。 构造如下新的目标函数,可求得使下式达到最小值的必要条件:其实就是拉格朗日乘子法:

对上式所有输入参量求导,使上式达到最小的必要条件为:

由上述两个必要条件,模糊 C 均值聚类算法是一个简单的迭代过程。在批处理方式运行时, FCM 用下列步骤确定聚类中心 ci 和隶属矩阵 U[1]: 步骤 1:用值在 0,1 间的随机数初始化隶属矩阵 U 步骤 2:用式(3)计算 c 个聚类中心 ci,i=1,…,c。 步骤 3:根据式(1)计算价值函数。如果它小于某个确定的阀值,或它相对上次价 值函数值的改变量小于某个阀值,则算法停止。 步骤 4:用(4)计算新的 U 矩阵和。返回步骤 2。 上述算法也可以先初始化聚类中心,然后再执行迭代过程。由于不能确保 FCM 收敛于一个最优解。算法的性能依赖于初始聚类中心。因此,我们要么用另外的快速算法确定初始聚类中心,要么每次用不同的初始聚类中心启动该算法,多次运行 FCM。

注:上面讨论不难看出二个参数比较重要:1.聚类的数目,2.控制算法的参数m,如果m过大,则聚类的效果很差,如果m过小,则算法接近Kmeans算法。

借用Matlab自带的fcm函数来做个例子

代码语言:javascript
复制
data = rand(100,2); % 数据
options = [2;100;1e-5;1]; % 控制参数
[center,U,obj_fcn] = fcm(data,2,options);  % 聚类为2类
figure; 
plot(data(:,1), data(:,2),'o'); 
title('Demo'); 
grid on; 
hold on; 
maxU = max(U); 
index1 = find(U(1,:) == maxU); 
index2 = find(U(2,:) == maxU); 
line(data(index1,1),data(index1,2),'marker','*','color','g'); 
line(data(index2,1),data(index2,2),'marker','*','color','r'); 
plot([center([1 2],1)],[center([1 2],2)],'*','color','k') 
hold off;
figure
plot(obj_fcn)
title('Objective Function Values')   
xlabel('Iteration Count')
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法工程师的学习日志 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档