FCM算法

  • FCMFCMFCM算法简介
  • FCMFCMFCM算法原理
  • FCMFCMFCM算法实现(matlab)(matlab)(matlab)

FCMFCMFCM算法简介

FCMFCMFCM算法属于划分式聚类算法,用模糊的方法来处理聚类问题,他从一个初始划分开始,需要预先指定聚类数目,还需要定义一个最优化聚类标准,也就是目标函数,作为度量各类样本分布的代价函数。FCMFCMFCM把N个数据向量分为CCC个模糊类,用每个类的聚类中心代表该类。通过反复的迭代运算,逐步降低目标函数的误差值,当目标函数收敛时,可得到最终的聚类结果。

FCMFCMFCM算法原理

符号说明:
xix_i\quadxi​ 第iii个样本
NN\quadN 样本的个数
ll\quadl 样本的维度
CC\quadC 划分的样本的类别
VV\quadV 聚类中心
uiku_{ik}\quaduik​第iii个数据点属于第k类的隶属度
d(xi,vk)d(x_i,v_k)\quadd(xi​,vk​) 第iii个样本到第kkk聚类中心的欧氏距离,即d(xi,vk)=∑p=1L(xip−vkp)2d(x_i,v_k)=\sqrt{\sum_{p=1}^L(x_{ip}-v_{kp})^2}d(xi​,vk​)=∑p=1L​(xip​−vkp​)2​

FCMFCMFCM算法的目标函数定义为:
JFCM(u,v)=∑k=1C∑i=1Nuikmd2(xi,vk)J_{FCM}(u,v)=\sum_{k=1}^C\sum_{i=1}^Nu_{ik}^md^2(x_i,v_k)JFCM​(u,v)=k=1∑C​i=1∑N​uikm​d2(xi​,vk​)
其中隶属度的约束条件为:
∑k=1Cuik=1i=1,2,...,N\sum_{k=1}^Cu_{ik}=1 \quad i=1,2,...,Nk=1∑C​uik​=1i=1,2,...,N
将欧式距离带入到目标函数公式:
JFCM(u,v)=∑i=1N∑k=1C(uik2)∑p=1L(xip−vkp)2k∈{1,2,...C}p∈{1,2,...L}J_{FCM}(u,v)=\sum_{i=1}^N\sum_{k=1}^C(u_{ik}^2)\sum_{p=1}^L(x_{ip}-v_{kp})^2\quad k\in{\{1,2,...C}\}\quad p\in{\{1,2,...L\}}JFCM​(u,v)=i=1∑N​k=1∑C​(uik2​)p=1∑L​(xip​−vkp​)2k∈{1,2,...C}p∈{1,2,...L}
对vkpv_{kp}vkp​求偏导数,并令其为零,得:
∂JFCM∂vkp=2∑i=1N(uik)2(xip−vkp)\frac{\partial{J_{FCM}}}{\partial v_{kp}} =2\sum_{i=1}^N (u_{ik})^2(x_{ip}-v_{kp})∂vkp​∂JFCM​​=2i=1∑N​(uik​)2(xip​−vkp​)
2∑i=1N(uik)2(xip−vkp)=02\sum_{i=1}^N(u_{ik})^2(x_{ip}-v_{kp})=02i=1∑N​(uik​)2(xip​−vkp​)=0
解得:
vkp=∑i=1N(uik)2xip∑i=1N(uik)2v_{kp}=\frac{\sum_{i=1}^N(u_{ik})^2x_{ip}}{\sum_{i=1}^N(u_{ik})^2}vkp​=∑i=1N​(uik​)2∑i=1N​(uik​)2xip​​
构造拉格朗日函数:
JFCM(u,v,λ)=∑i=1N∑k=1C(uik)d2(xi−vk)−∑i=1Nλi(∑k=1Cuik−1)J_{FCM}(u,v,\lambda)=\sum_{i=1}^N\sum_{k=1}^C(u_{ik})^{d^2(x_{i}-v_{k})}-\sum_{i=1}^N\lambda_i(\sum_{k=1}^Cu_{ik}-1)\quad JFCM​(u,v,λ)=i=1∑N​k=1∑C​(uik​)d2(xi​−vk​)−i=1∑N​λi​(k=1∑C​uik​−1)
r∈{1,2,...N}s∈{1,2,...C}r\in{\{ 1,2,...N\}} s\in{\{ 1,2,...C\}}r∈{1,2,...N}s∈{1,2,...C}
对ursu_{rs}urs​求偏导数并令其为零,得:

∂JFCM(u,v)∂urs=2(uusd2(xr−λr))=0\frac{\partial {J_{FCM}(u,v)}}{\partial u_{rs}}=2(u_{us}d^2(x_r-\lambda_r))=0∂urs​∂JFCM​(u,v)​=2(uus​d2(xr​−λr​))=0
urs=λr2d2(xr,vs)u_{rs}=\frac{\lambda_r}{2d^2{(x_r,v_s)}}urs​=2d2(xr​,vs​)λr​​

考虑到约束条件,∑k=1Curk=1\sum_{k=1}^Cu_{rk}=1∑k=1C​urk​=1,得:∑k=1Cλr2d2(xr,vk)=1\sum_{k=1}^C\frac{\lambda_r}{2d^2(x_r,v_k)}=1∑k=1C​2d2(xr​,vk​)λr​​=1,即:
λr=1∑k=1C12d2(xr,vk)\lambda_r=\frac{1}{\sum_{k=1}^C\frac{1}{2d^2(x_r,v_k)}}λr​=∑k=1C​2d2(xr​,vk​)1​1​
将λr\lambda_rλr​带入可得:
vk=∑i=1N(uik)mxi∑i=1N(uik)mv_k=\frac{\sum_{i=1}^N(u_{ik})^m x_i}{\sum_{i=1}^N(u_{ik})^m}vk​=∑i=1N​(uik​)m∑i=1N​(uik​)mxi​​
隶属度的更新公式为:
uik=1d2(xi,vk)∑r=1C1d2(xi,vr)u_{ik}=\frac{ \frac{1} {d^2(x_i,v_k)} }{{\sum_{r=1}^C }\frac{1} {d^2(x_i,v_r)}}uik​=∑r=1C​d2(xi​,vr​)1​d2(xi​,vk​)1​​

FCMFCMFCM算法实现(matlab)(matlab)(matlab)

一共有的四个函数:
主函数 FCMCluster.m
模糊矩阵初始化:initfcm.m
欧氏距离distfcm.m
逐次聚类:stepfcm.m

function [center,U,obj_fun]=FCMCluster(data,n,options)% 采用模糊c均值聚类,将数据集分为n类
% data 数据集 n 类别数
% options 4*1 矩阵
% option(1):隶属度函数矩阵的加权指数,默认为2
% option(2):最大迭代次数,默认100次
% option(3):隶属度最小变化量,默认为1e-5
% option(4):每次迭代是否输出信息标志,默认输出,值为1
% center 聚类中心
% U 隶属度矩阵
% obj_fun 目标函数值%确定或给定参数
if nargin~=2 && nargin ~=3error('Too many ot too few input agruments');
end%默认参数
default_options=[2;100;1e-5;1];% 参数配置
if nargin==2options=default_options;elseif length(options)<4tmp=default_options;tmp(1:length(options))=options;options=tmp;endnan_index=find(isnan(options)==1);options(nan_index)=default_options(nan_index);if options(1)<=1error('The exponent should be greater than 1!');end
end%参量初始化expo=options(1);            %指数的次幂
max_iter=options(2);        %最大迭代次数
min_impro=options(3);       %精度
display=options(4);         %是否显示最终函数值
obj_fun=zeros(max_iter,1);  %储存聚类函数在每次迭代中的值data_n=size(data,1);        %行数,即样本个数
in_n=size(data,2);          %样本的维数
U=initfcm(n,data_n);        % 初始化模糊分配矩阵  % 主程序
for i=1:max_iter  [U,center,obj_fun(i)]=stepfcm(data,U,n,expo);%显示聚类最终的函数值if displayfprintf('FCM:Iteration count=%d,obj_fun=%f\n',i,obj_fun(i));end% 终止条件判断if i>1if abs(obj_fun(i)-obj_fun(i-1))<min_improbreak;endendenditer_n=i;
obj_fun(iter_n+1:max_iter)=[];
end
function U=initfcm(n,data_n)
%子函数  模糊矩阵初始化
% data_n 样本个数
% n 分类个数
% U(i,j)  第j个数据点属于第i个类的隶属度%取随机矩阵,且进行归一化(即,列和为1)U=rand(n,data_n);
col_sum=sum(U);
U=U./col_sum(ones(n,1),:);
end
function [U_new,center,obj_fun]=stepfcm(data,U,n,expo)
% 逐步聚类%聚类中心
mf=(U.^expo);
center=mf*data./((ones(size(data,2),1)* sum(mf'))');%聚类函数对应函数值
dist=distfcm(center,data);
obj_fun=sum( sum( (dist.^2).* mf) );%更新隶属度矩阵
tmp=dist.^(-2/(expo-1));
U_new=tmp./(ones(n,1)*sum(tmp));end
function out=distfcm(center,data)
% 计算样本到聚类中的距离,欧几里得距离out = zeros(size(center,1),size(data,1));for k=1:size(center,1)out(k,:)=sqrt( sum(((data-ones(size(data,1),1) * center(k,:)).^2)',1));
endend

下面利用随机生成的100个二维数据来对算法进行验证:

function fmean
clear,clc
close all
data=rand(100,2);
N=10;
[center,U,obj_fcn]=FCMCluster(data,N);
plot(data(:,1),data(:,2),'ro');
hold onU_max=max(U);
for j=1:100row(:,j)=find(U(:,j)==U_max(j)); %列数对应相应的数据位置,矩阵元素对应其类别
endfor i=1:Ncol=find(row==i);      %max(U)返回隶属度列最大值所在行一致的分为一类plot(data(col,1),data(col,2),'*');hold onend
grid on
%画出聚类中心
plot(center(:,1),center(:,2),'p','color','m','MarkerSize',8);
end

运行的结果:

聚类图:

PS:如果有问题或疑问可以联系我。

FCM算法的matlab实现(Fuzzy C-means 算法)相关推荐

  1. Fuzzy C Means 算法及其 Python 实现——写得很清楚,见原文

    Fuzzy C Means 算法及其 Python 实现 转自:http://note4code.com/2015/04/14/fuzzy-c-means-%E7%AE%97%E6%B3%95%E5% ...

  2. 【老生谈算法】matlab实现模糊K-均值算法——均值算法

    模糊K-均值算法及其matlab实现 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]模糊K-均值算法及其matlab实现.d ...

  3. 【老生谈算法】matlab实现全相位校准算法——全相位校准算法

    全相位校准--信号相位的精确估计方法 matlab程序 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]全相位校准算法及mat ...

  4. 【老生谈算法】matlab实现数字图像去噪典型算法——图像去噪算法

    matlab图像去噪算法详解 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]数字图像去噪典型算法及matlab实现.doc ...

  5. 波束赋形技术lms算法在matlab仿真,自适应波束成形算法LMS、RLS、VSSLMS分解

    1.传统的通信系统中,基站天线通常是全向天线,此时,基站在向某一个用户发射或接收信号时,不仅会造成发射功率的浪费,还会对处于其他方位的用户产生干扰.然而,虽然阵列天线的方向图是全向的,但是通过一定技术 ...

  6. 【老生谈算法】matlab实现高斯白噪声仿真算法源码——高斯白噪声

    高斯白噪声的建模与仿真matlab实现 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]高斯白噪声的matlab实现.doc ...

  7. 【老生谈算法】matlab实现Kruskal避圈算法求最小生成树——Kruskal避圈算法

    基于MATLAB的Kruskal避圈算法求最小生成树 1.原文下载: 本算法原文如下,有需要的朋友可以点击进行下载 序号 原文(点击下载) 本项目原文 [老生谈算法]基于MATLAB的Kruskal避 ...

  8. 【老生谈算法】matlab实现图像去雾算法——图像去雾

    基于matlab的图像去雾算法详细讲解与实现-附matlab实现源代码 ## 1.原文下载: 本算法原文如下,有需要的朋友可以点击进行下载 序号 原文(点击下载) 本项目原文 [老生谈算法]基于mat ...

  9. 【老生谈算法】matlab实现马氏链算法源码——马氏链

    matlab马氏链代码 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]matlab马氏链代码.docx 2.算法详解: 1. ...

  10. 【老生谈算法】matlab实现压缩感知重构算法之正则化正交匹配追踪(ROMP)——ROMP

    matlab压缩感知重构算法之正则化正交匹配追踪(ROMP) 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]贪婪算法中ROM ...

最新文章

  1. block_dump观察Linux IO写入的具体文件(mysqld)
  2. python进阶:JSON与枚举
  3. aspx页面引用html页面
  4. 大学阶段总结——大三
  5. netty系列之:自定义编码解码器
  6. 《编程题》组装三角形
  7. 购买阿里云ECS服务器忘记终端管理密码或者没有设置
  8. gateway请求拦截_spring cloud gateway 拦截request Body
  9. 计算机系统-电路设计01-非门电路
  10. eclipse插件:OpenExplorer快速打开文件目录
  11. 信用评分卡(python)
  12. 复制文件或文件夹时出错_为什么对于小白来说,复制文件一个都会出错???...
  13. steam安装维护服务器,安装steam无法连接服务器 | 手游网游页游攻略大全
  14. 数字孪生 软著登记表 模板
  15. [terry笔记]Python字符串
  16. 信息系统高级项目管理师英语词汇(一)-常见计算机技术词汇
  17. 【情报百科】一张照片就能精准锁定你的位置
  18. linux版uTorrent安装手记
  19. 华为机试:身高体重排序
  20. 用c语言实现1+2+3+...+n求和

热门文章

  1. 通达信 移动平均算法_【股市钱包】A005号指标:通达信分时图MACD
  2. 三维文件格式 abc, glTF, fbx, obj, dae, stl, 3ds, ply,...
  3. 手机浏览器看视频加载太慢怎么办,这5招用了提速快
  4. linux etcfstab文件,Linux中/etc/fstab文件详解
  5. linux区分三种用户角色,Linux用户角色划分
  6. java初级程序员_为什么现在JAVA初级程序员要求这么高?
  7. 微信H5开发wx.config授权invalid signature
  8. 京瓷打印机m5521cdn_京瓷ECOSYS M5521cdn打印机驱动下载
  9. 2021年低压电工复审考试及低压电工模拟考试
  10. Agisoft Photoscan/Mateshape 相机参数XML解读