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

注:

作者:王亨

公众号:跟着菜鸟一起学R语言

原文链接:http://blog.csdn.net/wzgl__wh

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

  1. caret包介绍学习之train函数介绍

    caret包在机器学习会经常用到,它可以进行:数据预处理,特征选择,建模与参数优化,模型预测与检验.关于caret包在这些方面的应用可以参看文章: R语言之-caret包应用 R语言caret包的学习 ...

  2. C++文件操作API函数介绍

    转自 http://www.studentblog.net/m/tonycat/archives/2006/26364.html 文件的基本概念 所谓"文件"是指一组相关数据的有序 ...

  3. 简单介绍一下R中的几种统计分布及常用模型

    统计学上分布有很多,在R中基本都有描述.因能力有限,我们就挑选几个常用的.比较重要的简单介绍一下每种分布的定义,公式,以及在R中的展示. 统计分布每一种分布有四个函数:d――density(密度函数) ...

  4. ⅰcp经济模型_简单介绍一下R中的几种统计分布及常用模型

    统计学上分布有很多,在R中基本都有描述.因能力有限,我们就挑选几个常用的.比较重要的简单介绍一下每种分布的定义,公式,以及在R中的展示. 统计分布每一种分布有四个函数:d――density(密度函数) ...

  5. R语言使用psych包进行主成分分析PCA和探索性因子分析EFA的常用函数介绍:principal、fa、fa.parallel、factor.plot、fa.diagram、scree

    R语言使用psych包进行主成分分析PCA和探索性因子分析EFA的常用函数介绍:principal.fa.fa.parallel.factor.plot.fa.diagram.scree 目录

  6. R数据分析:数据清洗的思路和核心函数介绍

    好多同学把统计和数据清洗搞混,直接把原始数据发给我,做个统计吧,这个时候其实很大的工作量是在数据清洗和处理上,如果数据很杂乱,清洗起来是很费工夫的,反而清洗好的数据做统计分析常常就是一行代码的事情. ...

  7. R count函数_R语言系列第二期:R变量、脚本、作图等模块介绍

    在上一篇文章里,给大家介绍了R语言的下载,界面操作,6个处理对象等等.R语言系列第一期(番外篇 ):R的6种对象-向量.矩阵.数组.因子.列表.数据框 在这些内容的基础上,我们在这个部分为大家介绍一些 ...

  8. python3 转码的函数_python基础3之文件操作、字符编码解码、函数介绍

    内容概要: 一.文件操作 二.字符编码解码 三.函数介绍 一.文件操作 文件操作流程: 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 基本操作: 1 #/usr/bin/e ...

  9. Numpy中np.mashgri() 函数介绍及2种应用场景

    @[toc](Numpy中np.mashgri() 函数介绍及2种应用场景 文章目录:) 近期在好几个地方都看到meshgrid的使用,虽然之前也注意到meshgrid的用法. 但总觉得印象不深刻,不 ...

最新文章

  1. R语言ggplot2可视化绘制线图(line plot)、使用gghighlight包突出高亮线图的满足条件的线图、设置高亮线图不显示默认自动显示的文本标签(use_direct_label)
  2. Python爬虫(一)_HTTP的请求与响应
  3. 全球及中国电缆保护套管行业十四五规划及投资前瞻专题分析报告2021年版
  4. oracle 控制文件作用是什么,Oracle控制文件(controlfile)作用
  5. PHPUNIT 单元测试
  6. Linux 免密登录配置
  7. matlab运算速度与cpu的关系,请教编程语言和运算速度的关系
  8. chrome web store的信息
  9. 为什么Java里面的静态方法不能是抽象的
  10. draw9patch超详细教程【转】
  11. SQL 删除数据-select在当前表字段作为条件
  12. EXT4中恢复使用rm命令误删除的文件
  13. 【好书试读】交互设计沉思录——顶尖设计专家Jon Kolko的经验与心得
  14. 深度学习学习率对模型训练的影响
  15. 联通沃云 服务器 FTP安装设置
  16. Kotlin - 面向对象之抽象类与接口
  17. 卫星历史影像数据—六种查看方法
  18. android新闻客户端(有源码)
  19. Linux下vi修改行距,调整label中text显示的行间距
  20. BP神经网络C语言实现

热门文章

  1. 1.1.2 标准化工作及相关组织
  2. php 数组 随机选择_php中通过数组进行高效随机抽取指定条记录的算法
  3. Hello,Word宏!
  4. webdriver For selenium
  5. 自己整理的shell笔记
  6. Silverlight实用窍门系列:59.多个中心点联动多线的可拖动控件扩展为拓扑图
  7. 《MySQL技术内幕:InnoDB存储引擎第2版》——3.1 参数文件
  8. SpringMVC详细示例实战教程
  9. HTML4如何让一个DIV居中对齐?float输入日志标题
  10. gcc编译自定义头文件