1965年美国加州大学柏克莱分校的扎德教授第一次提出了‘集合’的概念。经过十多年的发展,模糊集合理论渐渐被应用到各个实际应用方面。为克服非此即彼的分类缺点,出现了以模糊集合论为数学基础的聚类分析。用模糊数学的方法进行聚类分析,就是模糊聚类分析。FCM(Fuzzy C-Means)算法是一种以隶属度来确定每个数据点属于某个聚类程度的算法。该聚类算法是传统硬聚类算法的一种改进。

算法流程:

  • 标准化数据矩阵;
  • 建立模糊相似矩阵,初始化隶属矩阵;
  • 算法开始迭代,直到目标函数收敛到极小值;
  • 根据迭代结果,由最后的隶属矩阵确定数据所属的类,显示最后的聚类结果。

优点:相比起前面的”硬聚类“,FCM方法会计算每个样本对所有类的隶属度,这给了我们一个参考该样本分类结果可靠性的计算方法,若某样本对某类的隶属度在所有类的隶属度中具有绝对优势,则该样本分到这个类是一个十分保险的做法,反之若该样本在所有类的隶属度相对平均,则我们需要其他辅助手段来进行分类。

缺点:KNN的缺点基本它都有

模糊聚类


  • cluster::fanny 
  • e1071::cmeans 

cluster::fanny


需要R安装包

install.packages("cluster")

示例代码:

library(cluster)
iris2 <- iris[-5]
fannyz=fanny(iris2,3,metric="SqEuclidean")
summary(fannyz)

分类分布:

> fannyz$clustering
[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 3 2 3 3 3 3 3 3 3 3 3 3 3 3
[66] 3 3 3 3 3 3 3 3 3 3 3 3 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 3 2 2 2 2 3 2 2 2 2 2 2 3 2 2 2 2 2 3 2 3 2 3 2 2 3 3 2 2
[131] 2 2 2 3 2 2 2 2 3 2 2 2 3 2 2 2 3 2 2 3

样本隶属度

> fannyz$membership
[,1] [,2] [,3]
[1,] 0.996623586 0.0010720343 0.0023043797
[2,] 0.975852543 0.0074979471 0.0166495094
[3,] 0.979825922 0.0064145785 0.0137594999
[4,] 0.967427446 0.0101075228 0.0224650314
[5,] 0.994470355 0.0017679352 0.0037617094
[6,] 0.934574112 0.0206196544 0.0448062334
[7,] 0.979491667 0.0065045178 0.0140038150
[8,] 0.999547263 0.0001412048 0.0003115325
[9,] 0.930379787 0.0219024180 0.0477177955
.......

图示显示 :clusplot(fannyz)

结果显示

> table(iris$Species,fannyz$clustering)

              1  2  3
setosa 50 0 0
versicolor 0 3 47
virginica 0 37 13

e1071::cmeans 


安装包代码:

install.packages("e1071")

示例代码:

> library("e1071")
> x <- iris[-5]
> result1<-cmeans(x,3,50)
> result1
Fuzzy c-means clustering with 3 clusters Cluster centers:
Sepal.Length Sepal.Width Petal.Length Petal.Width
1 5.888999 2.761093 4.364049 1.3973654
2 6.775092 3.052406 5.646882 2.0535855
3 5.003966 3.414086 1.482821 0.2535487 Memberships:
1 2 3
[1,] 0.0023043721 0.0010720485 0.996623579
[2,] 0.0166481906 0.0074975084 0.975854301
[3,] 0.0137586391 0.0064142953 0.979827066
.......

统计结果:

> table(iris$Species,result1$cluster)

              1  2  3
setosa 0 0 50
versicolor 47 3 0
virginica 13 37 0

3d效果显示示例

#install.packages("scatterplot3d")
library(scatterplot3d)
scatterplot3d(result1$membership, color=result1$cluster, type="h",
angle=55, scale.y=0.7, pch=16, main="Pertinence")


参考资料:

ML: 聚类算法R包-模糊聚类的更多相关文章

  1. ML: 聚类算法R包 - 模型聚类

    模型聚类 mclust::Mclust RWeka::Cobweb mclust::Mclust EM算法也称为期望最大化算法,在是使用该算法聚类时,将数据集看作一个有隐形变量的概率模型,并实现模型最 ...

  2. ML: 聚类算法R包-层次聚类

    层次聚类 stats::hclust stats::dist    R使用dist()函数来计算距离,Usage: dist(x, method = "euclidean", di ...

  3. ML: 聚类算法R包-网格聚类

    网格聚类算法 optpart::clique optpart::clique CLIQUE(Clustering In QUEst)是一种简单的基于网格的聚类方法,用于发现子空间中基于密度的簇.CLI ...

  4. ML: 聚类算法R包 - 密度聚类

    密度聚类 fpc::dbscan fpc::dbscan DBSCAN核心思想:如果一个点,在距它Eps的范围内有不少于MinPts个点,则该点就是核心点.核心和它Eps范围内的邻居形成一个簇.在一个 ...

  5. ML: 聚类算法R包-对比

    测试验证环境 数据: 7w+ 条,数据结构如下图: > head(car.train) DV DC RV RC SOC HV LV HT LT Type TypeName 1 379 85.09 ...

  6. ML: 聚类算法R包-K中心点聚类

    K-medodis与K-means比较相似,但是K-medoids和K-means是有区别的,不一样的地方在于中心点的选取,在K-means中,我们将中心点取为当前cluster中所有数据点的平均值, ...

  7. 聚类算法之k-均值聚类

    k-均值聚类算法 优点:容易实现 缺点:可能收敛到局部最小值,在大规模数据集上收敛较慢 适用数据类型:数值型数据 其工作流程:首先,随机确定k个初始点作为质心,然后将数据集中的每个点分配到一个簇中,具 ...

  8. ML: 聚类算法-K均值聚类

    基于划分方法聚类算法R包: K-均值聚类(K-means)                   stats::kmeans().fpc::kmeansruns() K-中心点聚类(K-Medoids) ...

  9. 机器学习笔记----Fuzzy c-means(FCM)模糊聚类详解及matlab实现

    前言:这几天一直都在研究模糊聚类.感觉网上的文档都没有一个详细而具体的讲解,正好今天有时间,就来聊一聊模糊聚类. 一:模糊数学 我们大家都知道计算机其实只认识两个数字0,1.我们平时写程序其实也是这样 ...

随机推荐

  1. SQL数据库操作(CURD)

    对数据仓库的操作(CURD): 新增:  create database db_test; 新增的时候设置编码: create database da_test_1 character set utf ...

  2. 如何在AngularX 中 使用ngrx

    ngrx 是 Angular框架的状态容器,提供可预测化的状态管理. 1.首先创建一个可路由访问的模块 这里命名为:DemopetModule. 包括文件:demopet.html.demopet.s ...

  3. [UWP]浅谈按钮设计

    一时兴起想谈谈UWP按钮的设计. 按钮是UI中最重要的元素之一,可能也是用得最多的交互元素.好的按钮设计可以有效提高用户体验,构造让人眼前一亮的UI.而且按钮通常不会影响布局,小小的按钮无论怎么改也不 ...

  4. CSS3-loading动画(二)

    上次分享了四个CSS3的加载动画,今天继续(标题接上一次). 在线demo:http://liyunpei.xyz/loading.html   (持续更新) 请注意:代码中的关键帧动画有的用的lin ...

  5. webgl开发第一道坎——矩阵与坐标变换

    一.齐次坐标 在3D世界中表示一个点的方式是:(x, y, z);然而在3D世界中表示一个向量的方式也是:(x, y, z);如果我们只给一个三元组(x, y, z)鬼知道这是向量还是点,毕竟点与向量 ...

  6. .Net中关于相等的问题

    在.Net框架中,如果您查看所有类型的的基类:System.Object类,将找到如下4个与相等判断的方法: static Equals() virtual Equals() static Refer ...

  7. 扩展entity framework core 实现默认字符串长度,decimal精度,entity自动注册和配置

    报道越短,事情越严重!文章越短,内容越精悍! 文章以efcore 2.0.0-preview2.测试验证通过.其他版本不保证使用,但是思路不会差太远.源代码 目标: 1.实现entity的自动发现和m ...

  8. (转)mq经验总结-转

    场景:学习mq相关的知识,发现这是一篇总结性很强的文章,转过来学习学习! 1 mq经验总结 首先了解什么是mq?mq的作用是什么? mq是通讯中间件.他的作用是省去开发人员开发通讯工具的时间,节省开发 ...

  9. php的laravel框架使用心得

    最近在做一项目,是基于laravel的后台api,用于与手机交互的,数据采用json格式.下面说下怎样在两周内把一个新框架或者语言用的得心应手. 项目采用laravel5.4+dingoapi+jwt ...

  10. ES2017中的async函数

    前面的话 ES2017标准引入了 async 函数,使得异步操作变得更加方便.本文将详细介绍async函数 概述 async 函数是 Generator 函数的语法糖 使用Generator 函数,依 ...