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

浏览: 1973

作者:王亨

个人公众号:跟着菜鸟一起学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)

image.png

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)

image.png

DBSCAN算法

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

 dbscan(data, eps, MinPts = 5, scale = FALSE, method = c("hybrid", "raw",    "dist"), seeds = TRUE, showplot = FALSE, countmode = NULL)

image.png

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(), ...)

image.png

系谱聚类

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

  1. hclust()函数

    hclust(d, method = "complete", members = NULL)

image.pngimage.png

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

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

image.png

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

rect.hclust(tree, k = NULL, which = NULL, x = NULL, h = NULL,            border = 2, cluster = NULL)

image.png




往期精彩内容整理合集 

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

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

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


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

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

推荐 0
本文由 R语言中文社区 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册