FuzzyC-Means 算法

本贴最后更新于 1524 天前,其中的信息可能已经事过境迁

FuzzyC-Means

模糊c-均值聚类算法 fuzzy c-means algorithm(FCMA)或(FCM)。模糊c均值聚类算法,是当前模糊系统里表现比较好的算法之一 其特征与k-means相似,也是基于距离来判断分类。模糊c均值需要用户提供除数据之外至少一个参数,而这个参数与k-means中的k类似。

模糊 c-均值聚类算法意在求解一个最小化问题即:

1.png

其中,uij 为样本 xj 属于第 i 类的隶属度,故 u 是一个 c×n 的矩阵,xj 就是第 j 个样本数据,ci 为第 i 个聚类中心一共有 c 个,m 则是一个大于 1 的加权常数一般取 2,可由用户定义。 在这里每个样本对于不同类的隶属度之和被限制为 1,但一般情况下模糊集合的隶属度通常加起来不为 1。接下来我们需要把这个条件极值问题转化为无条件的极值问题, 这里用到的方法就是拉格朗日乘子法:

2.png

然后需要对各个变量求导,以求得使得原式最小的变量值。对聚类的中心 C 求导:

3.png

其中,

4.png

故:
5.png
然后,
6.png
最后,
7.png

至此聚类中心 C 的迭代公式已确认,接下来就是模糊矩阵 u 的迭代推导。

第一部分,先对条件式的前半部分对 u 进行求导。

1.png

然后再求后半部分。

2.png

将两部分叠加。

3.png

4.png

5.png

最后 u 的迭代公式:

6.png

(以上参考至:https://www.cnblogs.com/wxl845235800/p/11053261.html)

接下来我们就可以根据两个迭代公式将算法轻松地编程。初始模糊矩阵取随机数,采用的分类数据为鸢尾花数据集,m 设置为 2,截至条件为 u 的二范数变化小于 1e-4.

function [V,F]=FSC(X,C,m) [n,D]=size(X); if D>n X=X'; [n,D]=size(X); end if nargin==2 m=2; end old=0; A=rand(C,n); A=oneness(A,n); new=norm(A); while abs(new-old)>1e-4 old=new; V=updataV(A); A=updataA(X,V); new=norm(A); [~,index]=max(A); end F=zeros(C,n); for f=1:n F(index(f),f)=1; end if D>2 X=zscore(X); %数据标准化 [~,~,latent]=pca(X); %PCA降维 [~,b]=sort(latent,'descend'); X=X(:,b(1:2)); %取前两维绘图 PlotClusterinResult(X,index); end if D==2 PlotClusterinResult(X,index); end function A=oneness(A,n) for i=1:n %模糊矩阵概率归一 A(:,i)=A(:,i)/sum(A(:,i)); end end function V=updataV(A) V=zeros(D,C); for i=1:C V(:,i)=(A(i,:).^m*X)'/sum(A(i,:).^m); end end function A=updataA(X,V) A=zeros(C,n); for i=1:C for j=1:n A(i,j)=1/sum((norm(X(j,:)'-V(:,i))./norm(X(j,:)'-V)).^(1/(m-1))); end end A=oneness(A,n); end end function PlotClusterinResult(X, IDX) k=max(IDX); Colors=hsv(k); Legends = {}; for i=0:k Xi=X(IDX==i,:); if i~=0 Style = 'x'; MarkerSize = 8; Color = Colors(i,:); Legends{end+1} = ['Cluster #' num2str(i)]; else Style = 'o'; MarkerSize = 6; Color = [0 0 0]; if ~isempty(Xi) Legends{end+1} = 'Noise'; end end if ~isempty(Xi) plot(Xi(:,1),Xi(:,2),Style,'MarkerSize',MarkerSize,'Color',Color); end hold on; end hold off; axis equal; grid on; legend(Legends); legend('Location', 'NorthEastOutside'); end

测试 Matlab 自带 fisheriris 数据集。

FSC(meas,3)

结果如下图:

0.jpg

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 安装

    你若安好,便是晴天。

    132 引用 • 1184 回帖
  • BND

    BND(Baidu Netdisk Downloader)是一款图形界面的百度网盘不限速下载器,支持 Windows、Linux 和 Mac,详细介绍请看这里

    107 引用 • 1281 回帖 • 33 关注
  • OAuth

    OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 oAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 oAuth 是安全的。oAuth 是 Open Authorization 的简写。

    36 引用 • 103 回帖 • 29 关注
  • HBase

    HBase 是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的 Google 论文 “Bigtable:一个结构化数据的分布式存储系统”。就像 Bigtable 利用了 Google 文件系统所提供的分布式数据存储一样,HBase 在 Hadoop 之上提供了类似于 Bigtable 的能力。

    17 引用 • 6 回帖 • 59 关注
  • 笔记

    好记性不如烂笔头。

    310 引用 • 794 回帖
  • MongoDB

    MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是一个基于分布式文件存储的数据库,由 C++ 语言编写。旨在为应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。

    91 引用 • 59 回帖 • 1 关注
  • BookxNote

    BookxNote 是一款全新的电子书学习工具,助力您的学习与思考,让您的大脑更高效的记忆。

    笔记整理交给我,一心只读圣贤书。

    1 引用 • 1 回帖
  • Dubbo

    Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,是 [阿里巴巴] SOA 服务化治理方案的核心框架,每天为 2,000+ 个服务提供 3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。

    60 引用 • 82 回帖 • 613 关注
  • JSON

    JSON (JavaScript Object Notation)是一种轻量级的数据交换格式。易于人类阅读和编写。同时也易于机器解析和生成。

    52 引用 • 190 回帖 • 1 关注
  • OpenShift

    红帽提供的 PaaS 云,支持多种编程语言,为开发人员提供了更为灵活的框架、存储选择。

    14 引用 • 20 回帖 • 654 关注
  • Electron

    Electron 基于 Chromium 和 Node.js,让你可以使用 HTML、CSS 和 JavaScript 构建应用。它是一个由 GitHub 及众多贡献者组成的活跃社区共同维护的开源项目,兼容 Mac、Windows 和 Linux,它构建的应用可在这三个操作系统上面运行。

    15 引用 • 136 回帖 • 5 关注
  • GitBook

    GitBook 使您的团队可以轻松编写和维护高质量的文档。 分享知识,提高团队的工作效率,让用户满意。

    3 引用 • 8 回帖
  • 电影

    这是一个不能说的秘密。

    122 引用 • 608 回帖 • 1 关注
  • CAP

    CAP 指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得。

    12 引用 • 5 回帖 • 631 关注
  • Postman

    Postman 是一款简单好用的 HTTP API 调试工具。

    4 引用 • 3 回帖 • 2 关注
  • flomo

    flomo 是新一代 「卡片笔记」 ,专注在碎片化时代,促进你的记录,帮你积累更多知识资产。

    6 引用 • 143 回帖 • 1 关注
  • Unity

    Unity 是由 Unity Technologies 开发的一个让开发者可以轻松创建诸如 2D、3D 多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

    25 引用 • 7 回帖 • 122 关注
  • 支付宝

    支付宝是全球领先的独立第三方支付平台,致力于为广大用户提供安全快速的电子支付/网上支付/安全支付/手机支付体验,及转账收款/水电煤缴费/信用卡还款/AA 收款等生活服务应用。

    29 引用 • 347 回帖
  • Eclipse

    Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

    76 引用 • 258 回帖 • 628 关注
  • V2EX

    V2EX 是创意工作者们的社区。这里目前汇聚了超过 400,000 名主要来自互联网行业、游戏行业和媒体行业的创意工作者。V2EX 希望能够成为创意工作者们的生活和事业的一部分。

    16 引用 • 236 回帖 • 263 关注
  • 程序员

    程序员是从事程序开发、程序维护的专业人员。

    589 引用 • 3538 回帖
  • 叶归
    8 引用 • 36 回帖 • 17 关注
  • 学习

    “梦想从学习开始,事业从实践起步” —— 习近平

    174 引用 • 538 回帖
  • 房星科技

    房星网,我们不和没有钱的程序员谈理想,我们要让程序员又有理想又有钱。我们有雄厚的房地产行业线下资源,遍布昆明全城的 100 家门店、四千地产经纪人是我们坚实的后盾。

    6 引用 • 141 回帖 • 590 关注
  • Log4j

    Log4j 是 Apache 开源的一款使用广泛的 Java 日志组件。

    20 引用 • 18 回帖 • 28 关注
  • 微信

    腾讯公司 2011 年 1 月 21 日推出的一款手机通讯软件。用户可以通过摇一摇、搜索号码、扫描二维码等添加好友和关注公众平台,同时可以将自己看到的精彩内容分享到微信朋友圈。

    133 引用 • 796 回帖 • 1 关注
  • Hibernate

    Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,使得 Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。

    39 引用 • 103 回帖 • 725 关注