聚类分析简单介绍(附R对应函数介绍)

2018 年 3 月 19 日 R语言中文社区 王亨


作者简介 Introduction

王亨:个人公众号:跟着菜鸟一起学R语言

聚类分析是一种机器学习领域最常用的分类方法,它在在客户分类,文本分类,基因识别,空间数据处理,卫星图片处理,医疗图像自动检测等领域有着广泛应用。聚类就是将相同,相似的对象划分到同一个组中,聚类分析事前不需要参考任何分类信息,可以通过判断数据表特征的相似性来完成对数据的归类。在聚类分析中,观测值的类别一般情况下是未知的。我们希望将观测值聚类为合适的几个分类。聚类在机器学习中就是无监督学习。今天来介绍一下下面的五种聚类方法和对于R里面的函数。

  • K-均值聚类(K-Means)

  • K-中心点聚类(K-Medoids)

  • 系谱聚类(HC)

  • 密度分析(DBSCAN)

  • 期望最大化聚类(EM)

聚类算法思想

K-均值聚类

K均值法:又称快速聚类法,有时也称扁平聚类。将n个对象分成k个簇,簇内高度相似,簇间较低相似。它并不知道训练集中的观测值的类别,它以观测值之间的距离作为度量观测值相似程度的指标,使用迭代的方法训练模型,它和KNN都具有计算简洁的优点,他们同样受聚类个数和初始分布的影响。它的思想是以随机选取的K个样本作为簇的起始中心点或簇的平均值,各个簇中心点的距离,将该对象赋给最近的簇,再计算每个簇的平均值,然后不断重复,直至所有样本所属类为中心。该算法的缺点是易受异常值的干扰。

K-中心点聚类  

由于K-均值算法易受极值影响,为了改进这一点缺点,就提出来K-中心点算法。K-均值算法是在当前簇中样本坐标的均值为新的中心点。K-中心点算法在选择各类别中心点时不选取样本均值点,而是选择簇内的每个对象为中心,使得总的代价减少或最小即可。它类别内选取到其余样本距离之和最小的样本为中心,这也保证了总的代价最小。但这也增加了算法的复杂度。K-中心聚类的鲁棒性更好。

系谱聚类

系谱聚类的主要特点是不需要事先设定类别数K,它在每次迭代过程中仅将距离最近的两个样本或簇聚为一类,其过程自然得到k=1至k=n(n为待分类样本总数)个类别的聚类结果。

密度聚类 

DBSCAN算法是基于密度的聚类方法中最常用的代表方法之一该算法将分布稠密的样本划分到同一个簇,并过滤掉那些低密度的区域。可以在有噪声的数据中形成任意形状的簇,弥补了前几种算法易受异常值干扰的缺点,因此可以发现各种任意形状的聚类簇。但他也有缺点,就是对定义的半径和密度阈值敏感,稍有不同,结果也会不一样,只能不断调整参数。

期望最大化聚类 

期望最大化算法,简称EM算法。该算法在聚类时,它将数据集看作一个含有隐形变量的概率模型,并实现模型最优化。通过“反复估计 ”这也迭代找出最优解,每一次迭代包含两步:第一步求期望值,称为E步,第二步求极大值,称为M步,同时给出相应的最优类别数k。kmeans聚类计算的是距离,该聚类是计算概率。

代码

K-均值算法

kmeans(x, centers, iter.max = 10, nstart = 1,       algorithm = c("Hartigan-Wong", "Lloyd", "Forgy",                     "MacQueen"), trace=FALSE)
参数 作用
x 数据
centers 预设类别数k
iter.max 迭代的最大值,默认是10
nstart 选择随机起始中心的次数,默认为1
algorithm 提供了4种算法
trace 逻辑值,为真时,则产生跟踪算法进度的信息

K-中心算法

实现K-中心算法的函数时pam(),它在cluster包里面。这个函数的参数比较多。

pam(x, k, diss = inherits(x, "dist"), metric = "euclidean",    medoids = NULL, stand = FALSE, cluster.only = FALSE,    do.swap = TRUE,    keep.diss = !diss && !cluster.only && n < 100,    keep.data = !diss && !cluster.only,    pamonce = FALSE, trace.lev = 0)
函数 作用
x 数据集
k 别数
metric 选择样本间距离测算的距离
medoids 默认是null,选择初始中心点样本
stand 数据在聚类前是否需要标准化
cluster.only 是否仅获取各样本所归属的类别,若选择true,则效率更高一些
keep.data 是否在聚类结果中保存数据集
keep.diss 是否将不相似的或输入数据保存在结果中

DBSCAN算法

DBSCAN包里面的dbscan()函数实现了DBSCAN算法,函数具体为:

 dbscan(data, eps, MinPts = 5, scale = FALSE, method = c("hybrid", "raw",    "dist"), seeds = TRUE, showplot = FALSE, countmode = NULL)
参数 作用
data 数据集或距离矩阵
eps 划分考察领域半径
minPts 密度阈值
scale 数据是否进行标准化
method 如何看待数据集,hybrid", 表示数据是距离矩阵,"raw",表示数据是原始数据,"dist"表示原始数据
showplot 是否输出聚类结果示意图,0,1,2分别表示不绘图,每次迭代都绘图,仅迭代过程绘图
countmode 默认是null,也可以是一个数字向量

EM聚类算法

在mclust扩展包里面提供了几个函数,Mclust,mclustBIC,mclust2Dplot,densityMclust函数。

Mclust(data, G = NULL, modelNames = NULL,        prior = NULL,        control = emControl(),        initialization = NULL,        warn = mclust.options("warn"),        x =  NULL,        verbose = interactive(), ...)
参数 作用
data 待处理数据
G 预设类别数,默认是1-9
modelNames 设定模型类别
prior 优先级,默认是没有的但它的共轭先验是根据平均值和方差。当模型比较多的时候可能会用。
control EM算法的一个参数,默认调用emControl()
warn 是否放出警告,默认是 mclust.options函数
X 与BIC有关的一个参数
verbose 默认是true,它在计算过程不显示。如果需要交互,则为false


如果要对结果进行可视化,可以使用mclust2Dplot函数。

系谱聚类

在stats扩展包里面有三个函数可以进行系谱聚类,每个函数都略有区别。

  1. hclust()函数

    hclust(d, method = "complete", members = NULL)
参数 作用
d 待处理数据样本间的距离矩阵
method 可选择具体的算法, 有"ward.D", "ward.D2", "single", "complete", "average" , "mcquitty" , "median" 或 "centroid"
menbers 指出每个待聚类样本点由几个单样本构成

2. cutree函数cutree函数则是对hclust函数的聚类结果进行剪枝。即选择输出指定类别数的系谱聚类结果剪枝就是说输出指定指定类别数的系谱聚类结果。

cutree(tree, k = NULL, h = NULL)

参数 作用
tree hclust的结果
k 控制得到几个簇
h 控制需要剪点树的高度

3. rect.hlcust函数该函数可以对结果进行可视化展现。它是在plot形成的系谱图中指定类别中样本分支并用方框表示出了。

rect.hclust(tree, k = NULL, which = NULL, x = NULL, h = NULL,            border = 2, cluster = NULL)
参数 作用
tree hclust函数的结果
k,h 标量,切割使产生K个簇或者在高度为h处切割
which 是一个向量,可以在指定簇上面用矩阵标注出来,与X不能同时设置参数。
x 从左到右,按数字聚类,x选择包含相应水平坐标的聚类。 默认是 1:k。
border 绘制图片矩阵的颜色




 往期精彩内容整理合集 

2017年R语言发展报告(国内)

R语言中文社区历史文章整理(作者篇)

R语言中文社区历史文章整理(类型篇)


公众号后台回复关键字即可学习

回复 R                  R语言快速入门及数据挖掘 
回复 Kaggle案例  Kaggle十大案例精讲(连载中)
回复 文本挖掘      手把手教你做文本挖掘
回复 可视化          R语言可视化在商务场景中的应用 
回复 大数据         大数据系列免费视频教程 
回复 量化投资      张丹教你如何用R语言量化投资 
回复 用户画像      京东大数据,揭秘用户画像
回复 数据挖掘     常用数据挖掘算法原理解释与应用
回复 机器学习     人工智能系列之机器学习与实践
回复 爬虫            R语言爬虫实战案例分享

登录查看更多
1

相关内容

聚类分析(Clustering)是无监督学习的一种,目的是将一组数据点分类,但没有训练数据集,区别于有监督的分类分析(Classification)。
最新《多任务学习》综述,39页pdf
专知会员服务
263+阅读 · 2020年7月10日
【人大】图实现算法综述与评测分析
专知会员服务
37+阅读 · 2020年4月28日
专知会员服务
110+阅读 · 2020年3月20日
【干货书】机器学习Python实战教程,366页pdf
专知会员服务
338+阅读 · 2020年3月17日
【新书】Pro 机器学习算法Python实现,379页pdf
专知会员服务
198+阅读 · 2020年2月11日
NLP基础任务:文本分类近年发展汇总,68页超详细解析
专知会员服务
57+阅读 · 2020年1月3日
再谈人脸识别损失函数综述
人工智能前沿讲习班
14+阅读 · 2019年5月7日
【收藏】支持向量机原理详解+案例+代码!【点击阅读原文下载】
机器学习算法与Python学习
10+阅读 · 2018年9月13日
详解常见的损失函数
七月在线实验室
20+阅读 · 2018年7月12日
一文了解采样方法
AI100
5+阅读 · 2018年7月6日
已删除
将门创投
4+阅读 · 2018年6月12日
干货 :基于用户画像的聚类分析
数据分析
22+阅读 · 2018年5月17日
数据科学家需要了解的5种聚类算法
论智
4+阅读 · 2018年4月7日
机器学习之确定最佳聚类数目的10种方法
炼数成金订阅号
13+阅读 · 2017年10月12日
一文详解聚类和降维(附实例、代码)
数据派THU
7+阅读 · 2017年9月3日
A Probe into Understanding GAN and VAE models
Arxiv
9+阅读 · 2018年12月13日
Meta-Learning with Latent Embedding Optimization
Arxiv
6+阅读 · 2018年7月16日
VIP会员
相关资讯
再谈人脸识别损失函数综述
人工智能前沿讲习班
14+阅读 · 2019年5月7日
【收藏】支持向量机原理详解+案例+代码!【点击阅读原文下载】
机器学习算法与Python学习
10+阅读 · 2018年9月13日
详解常见的损失函数
七月在线实验室
20+阅读 · 2018年7月12日
一文了解采样方法
AI100
5+阅读 · 2018年7月6日
已删除
将门创投
4+阅读 · 2018年6月12日
干货 :基于用户画像的聚类分析
数据分析
22+阅读 · 2018年5月17日
数据科学家需要了解的5种聚类算法
论智
4+阅读 · 2018年4月7日
机器学习之确定最佳聚类数目的10种方法
炼数成金订阅号
13+阅读 · 2017年10月12日
一文详解聚类和降维(附实例、代码)
数据派THU
7+阅读 · 2017年9月3日
Top
微信扫码咨询专知VIP会员