本文主要介绍在R语言中使用k-means和K-Medoids进行聚类分析的方法。

一、首先介绍下聚类分析中主要的算法:

l  K-均值聚类(K-Means)   十大经典算法

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

l  密度聚类(DBSCAN)

l  系谱聚类(HC)

l  期望最大化聚类(EM)   十大经典算法

聚类算法

软件包

主要函数

K-means

stats

kmeans()

K-Medoids

cluster

pam()

系谱聚类(HC)

stats

hclust(), cutree(), rect.hclust()

密度聚类(DBSCAN)

fpc

dbscan()

期望最大化聚类(EM)

mclust

Mclust(), clustBIC(), mclust2Dplot(), densityMclust()

二、用iris数据集进行kmeans分析

# kmeans对iris进行聚类分析 iris2<-iris[,1:4]
iris.kmeans<-kmeans(iris2,3)
iris.kmeans#用table函数查看分类结果情况
table(iris$Species,iris.kmeans$cluster)# 1  2  3
# setosa     50  0  0
# versicolor  0 48  2
# virginica   0 14 36# K-means clustering with 3 clusters of sizes 50, 62, 38# Cluster means:
#   Sepal.Length Sepal.Width Petal.Length Petal.Width
# 1     5.006000    3.428000     1.462000    0.246000
# 2     5.901613    2.748387     4.393548    1.433871
# 3     6.850000    3.073684     5.742105    2.071053
#
# Clustering vector:
#   [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 2 3 2 2
# [56] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 2 3 3 3 3 2 3 3 3
# [111] 3 3 3 2 2 3 3 3 3 2 3 2 3 2 3 3 2 2 3 3 3 3 3 2 3 3 3 3 2 3 3 3 2 3 3 3 2 3 3 2
#
# Within cluster sum of squares by cluster:
#   [1] 15.15100 39.82097 23.87947
# (between_SS / total_SS =  88.4 %)
#
# Available components:
#
#   [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss" "betweenss"    "size"
# [8] "iter"         "ifault"
#在上述属性中,最常用的就是centers和cluster属性,即中心点和聚类的分类集合#下边我们将分类以及中心点打印出来plot(iris2$Sepal.Length,iris2$Sepal.Width,col=iris.kmeans$cluster,pch="*")points(iris.kmeans$centers,pch="X",cex=1.5,col=4)

三、使用K-Mediods 进行聚类分析

K-Mediods函数跟Kmeans函数基本类似,不同的是,Kmeans是选择簇中心来表示聚类簇,而K-Mediods选择靠近簇中心的对象来表示聚类簇。在含有离群点的情况,下K-Mediods的鲁棒性(稳定性)要更好。

基于中心点的划分算法PAM是K-Mediods中的经典算法,但是PAM很难扩展到较大数据集上,而Clara算法是对PAM算法的改进,他是在较大数据集中分为几个小数据集,分别进行PAM算法,并返回最好的聚类。因此在处理较大数据集的情况下CLARA算法要优于PAM算法,

在R的cluster包中的PAM和CLARA函数分别实现了上述两个算法,但是这两个函数都需要用户指定k值,即中心点的个数。fpc包中的pamk()函数提供了更加强大的算法,该函数不要求用户输入k值,而是自动调用pam或者clara来根据最优平均阴影宽度来估计聚类簇个数来划分数据集。

K-mediods算法描述

a) 首先随机选取一组聚类样本作为中心点集

b) 每个中心点对应一个簇

c) 计算各样本点到各个中心点的距离(如欧几里德距离),将样本点放入距离中心点最短的那个簇中

d) 计算各簇中,距簇内各样本点距离的绝度误差最小的点,作为新的中心点

e) 如果新的中心点集与原中心点集相同,算法终止;如果新的中心点集与原中心点集不完全相同,返回b)

#-----使用K-mediods方法来进行聚类分析
#k-mediods中包含pam、clara、pamk三种算法,我们通过iris数据集来看看三者表现install.packages("cluster")
library(cluster)iris2.pam<-pam(iris2,3)
table(iris$Species,iris2.pam$clustering)#             1  2  3
# setosa     50  0  0
# versicolor  0 48  2
# virginica   0 14 36layout(matrix(c(1,2),1,2)) #每页显示两个图
plot(iris2.pam)
layout(matrix(1))
iris2.clara<-clara(iris2,3)
table(iris$Species,iris2.clara$clustering)#             1  2  3
# setosa     50  0  0
# versicolor  0 48  2
# virginica   0 13 37layout(matrix(c(1,2),1,2)) #每页显示两个图
plot(iris2.clara)
layout(matrix(1))
install.packages("fpc")
library(fpc)
iris2.pamk<-pamk(iris2)
table(iris2.pamk$pamobject$clustering,iris$Species)layout(matrix(c(1,2),1,2)) #每页显示两个图
plot(iris2.pamk$pamobject)
layout(matrix(1))#     setosa versicolor virginica
# 1     50          1         0
# 2      0         49        50#通过上述分类结果可以看到,pam和calra算法分类结果基本类似,但是pamk将三类分为了两类。。

四、层次聚类HCluster

基本思想:

1、开始时,将每个样本作为一类。

2、规定某种度量作为样本之间距离以及类距离之间的度量,并且计算之。(hculster里边的dist方法以及method属性)

3、将距离最短的两个类合并为一个类。

4、重复2-3,即不断合并最近的两个类,每次减少一个类,直到所有的样本合并为一个类。

点与点的距离和类与类之间距离的计算可以参考R-modeling关于距离的介绍。

#---层次聚类
dim(iris)#返回行列数idx<-sample(1:dim(iris)[1],40)
iris3<-iris[idx,-5]
iris3
hc<-hclust(dist(iris3),method = "ave")  #注意hcluster里边传入的是dist返回值对象plot(hc,hang=-1,labels=iris$Species[idx])  #这里的hang=-1使得树的节点在下方对齐
#将树分为3块
rect.hclust(hc,k=3)
groups<-cutree(hc,k=3)

五、基于密度的聚类

前边的k-Means和k-Mediods算法比较适用于簇为球型的,对于非球型的,一般需要基于密度的聚类,比如DBSCAN

要了解DBSCAN,我们需要知道几个基本概念

  • r-邻域:给定点半径为r的区域。
  • 核心点:如果一个点的r邻域内最少包含M个点,则该点称为核心点。
  • 直接密度可达:对于核心点P而言,如果另一个点O在P的r邻域内,那么称O为P的直接密度可达点。
  • 密度可达:对于P的直接密度可达点O的r邻域内,如果包含另一个点Q,那么称Q为P的密度可达点。
  • 密度相连:如果Q和N都是核心点P的密度可达点,但是并不在一条直线路径上,那么称两者为密度相连。

算法思想:

  1. 指定R和M。
  2. 计算所有的样本点,如果点p的r邻域内有超过M个点,那么创建一个以P为核心点的新簇。
  3. 反复寻找这些核心点的直接密度可达点(之后可能是密度可达),将其加入到相应的簇,对于核心点发生密度相连的情况加以合并。
  4. 当没有新的点加入到任何簇中时,算法结束。

优点:

(1)聚类速度快且能够有效处理噪声点和发现任意形状的空间聚类;
(2)与K-MEANS比较起来,不需要输入要划分的聚类个数;
(3)聚类簇的形状没有偏倚;
(4)可以在需要时输入过滤噪声的参数。
缺点:
(1)当数据量增大时,要求较大的内存支持I/O消耗也很大;
(2)当空间聚类的密度不均匀、聚类间距差相差很大时,聚类质量较差,因为这种情况下参数MinPts和Eps选取困难
(3)算法聚类效果依赖与距离公式选取,实际应用中常用欧式距离,对于高维数据,存在“维数灾难”。

R语言中的例子:

#---基于密度的聚类分析
library(fpc)
iris2<-iris[-5]
ds<-dbscan(iris2,eps=0.42,MinPts = 5)
table(ds$cluster,iris$Species)#打印出ds和iris2的聚类散点图
plot(ds,iris2)
#打印出iris第一列和第四列为坐标轴的聚类结果
plot(ds,iris2[,c(1,4)])
#另一个表示聚类结果的函数,plotcluster
plotcluster(iris2,ds$cluster)

【数据挖掘】使用R语言进行聚类分析相关推荐

  1. R语言KMeans聚类分析确定最优聚类簇数实战:间隙统计Gap Statistic(确定最优聚类簇数)

    R语言KMeans聚类分析确定最优聚类簇数实战:间隙统计Gap Statistic(确定最优聚类簇数) 目录

  2. R语言KMeans聚类分析确定最优聚类簇数实战:NbClust包(确定最优聚类簇数)

    R语言KMeans聚类分析确定最优聚类簇数实战:NbClust包(确定最优聚类簇数) 目录

  3. R语言KMeans聚类分析确定最优聚类簇数实战:期望最大化expectation-maximization准则(确定最优聚类簇数)

    R语言KMeans聚类分析确定最优聚类簇数实战:期望最大化expectation-maximization准则(确定最优聚类簇数) 目录

  4. R语言KMeans聚类分析确定最优聚类簇数实战:Calinski-Harabasz准则(确定最优聚类簇数)

    R语言KMeans聚类分析确定最优聚类簇数实战:Calinski-Harabasz准则(确定最优聚类簇数) 目录

  5. r语言平均值显著性检验_最全的R语言统计检验方法_数据挖掘中R语言的运用

    最全的R语言统计检验方法_数据挖掘中R语言的运用 统计检验是将抽样结果和抽样分布相对照而作出判断的工作.主要分5个步骤:建立假设 求抽样分布 选择显著性水平和否定域 计算检验统计量 判定 假设检验(h ...

  6. 一个用R语言进行聚类分析的例子

    一个用R语言进行聚类分析的例子(转载) 在网上(http://www.rdatamining.com/ )找到了一个用R语言进行聚类分析的例子, 在整个例子中做了一些中文解释说明. 数据集用的是iri ...

  7. r语言聚类分析_技术贴 | R语言pheatmap聚类分析和热图

    点击蓝字↑↑↑"微生态",轻松关注不迷路 本文由阿童木根据实践经验而整理,希望对大家有帮助. 原创微文,欢迎转发转载. 导读 pheatmap默认会对输入矩阵数据的行和列同时进行聚 ...

  8. 《R语言与数据挖掘》④R语言数据可视化最全的总结

    书籍:<R语言与数据挖掘> 作者:张良均 出版社:机械工业出版社 ISBN:9787111540526 本书由北京华章图文信息有限公司授权杭州云悦读网络有限公司电子版制作与发行 版权所有· ...

  9. 【R语言 数据挖掘】R语言如何做关联规则?

    一.前言 提到数据挖掘,我们第一反应就是之前听到的啤酒和尿不湿的故事,该故事就是典型的数据挖掘中的关联规则.购物篮分析区别于传统的线性回归的主要区别为,关联分析针对离散数据:下面我们利用R语言的aru ...

  10. 基于R语言的聚类分析(k-means,层次聚类)

    今天给大家展示基于R语言的聚类,在此之前呢,首先谈谈聚类分析,以及常见的聚类模型,说起聚类我们都知道,就是按照一定的相似性度量方式,把接近的一些个体聚在一起.这里主要是相似性度量,不同的数据类型,我们 ...

最新文章

  1. accesskey 提交
  2. vue mianjs 引用css_vue 学习记录八——webpack中常见的配置项
  3. java socket 传输压缩文件_java基于socket传输zip文件功能示例
  4. C# 的Delegate(委托)
  5. linux篡改url命令,在Linux中更改Git远程URL(Git Remote URL)的方法
  6. wpewebkit在ubuntu18.04上编译配置
  7. 懒人精灵节点工具使用
  8. 凯恩帝k1000ti参数设置_凯恩帝K1000T系统用户手册.pdf
  9. NXP JN5169 烧录器原理图(FT232RL,不带按键)
  10. 你不知道的JavaScript(上中下)全册
  11. 基于can总线的A2L文件解析(2)
  12. 删除账户后开机仍然登陆刚被删除的账户的解决方法
  13. 正定二次型与正定矩阵
  14. 1.13 打印机和工作簿的打印设置 [原创Excel教程]
  15. 台电tbook10s删除安卓系统_Andriod系统体验 简洁流畅_台电 TBook 10_平板电脑评测-中关村在线...
  16. 单页应用和多页应用的区别
  17. div css实现进度条
  18. 简单的博弈问题:牛羊吃草问题(递归解法-暴力解法)
  19. PyCharm安装及汉化
  20. 经典iframe后台系统框架

热门文章

  1. 单机:Oracle 19C 数据库一键安装
  2. Java post请求工具类
  3. linux du 查看文件夹大小
  4. 凯恩帝k1000ti参数设置_K1000TII标准程序调试参数说明
  5. Web前端开发-网页制作零基础入门-Dreamweaver2019+HTML+CSS视频教程
  6. 华为网络安全论述题解析(1)
  7. Matlab代码格式一键美化神器
  8. 模型运行速度FPS测试以及参数Parameter计算代码
  9. Windows自带的远程协助工具(非远程桌面)
  10. 关于U盘格式化以后容量突然减少很多的解决办法