码迷,mamicode.com
首页 > 编程语言 > 详细

聚类分析-R语言

时间:2015-08-03 13:02:42      阅读:1335      评论:0      收藏:0      [点我收藏+]

标签:

1、随机生成三个簇点:

> c1<-cbind(rnorm(30,2,1),rnorm(30,2,1))

> c2<-cbind(rnorm(30,3,1),rnorm(30,20,1))

> c3<-cbind(rnorm(30,15,1),rnorm(30,25,1))

> v=rbind(c1,c2,c3)

查看分布情况

> plot(v)

技术分享

图 1 产生的随机数据

2、K聚类

像PAM这样的K-中心点算法(常见的K-means,K-medois等等)在小型数据集上运行良好,但是不能很好的用于大数据集运行。为了处理大数据集,通常使用一种称作CLARA(Cluster Large Application)的基于抽样的方法。CLARA并不考虑整个数据集合,而是使用数据集的一个随机样本,然后使用PAM方法由样本计算最佳中心点。

本次实验主要用的是cluster包里面的clara函数。

> clara(v,3)
Call:  clara(x = v, k = 3) 
Medoids:
          [,1]      [,2]
[1,]  2.067384  1.761579
[2,]  3.037691 20.208036
[3,] 15.310366 25.211417
Objective function:  1.236222
Clustering vector:  int [1:90] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...
Cluster sizes:             30 30 30 
Best sample:
 [1]  2  4  5  6  7 11 12 13 23 24 25 26 27 29 32 34 37 41 42 43 44 45 47 49 51 52 53 54 57
[30] 59 60 61 62 63 64 65 67 74 75 77 81 82 83 84 85 89
 
Available components:
 [1] "sample"     "medoids"    "i.med"      "clustering" "objective"  "clusinfo"  
 [7] "diss"       "call"       "silinfo"    "data" 

显示结果:

> cls3<-clara(v,3)
> clusplot(cls3)

技术分享

图 2 分类数K取3的结果

K-means一个缺陷就是需要人为指定聚类数目K,如果k值指定的不好,聚类的效果也不是很好。

技术分享

图 3 分类数K分别去2,3,4,5的结果

3、层次聚类

层次聚类方法将数据对象组成层次结构或者簇的“树”,主要分为凝聚和分裂两类层次分析方法,跟别使用自底向上和自顶向下的策略把对象组织到层次结构中。

分裂方法一个很大的问题是如何把一个大簇分成几个较小的簇。N个对象的集合可以划分成两个互斥的2n-1-1种方法,当n很大是,计算量是非常大的,因此分裂方法通常采用启发式方法进行划分,但是导致结果不准确,而且为了效率,分裂方法不对已经做出的划分决策回溯。由于这些原因,凝聚方法一般比分裂方法用的多。

3.1凝聚层次聚类(agglomerative hierarchical clustering)

本次实验中采用的cluster包中的AGNES(Agglomerative Nesting)层次聚类算法。

agnSingle<-agnes(daisy(v),diss=TRUE,method="single")
> agnComplete<-agnes(daisy(v),diss=TRUE,method="complete")
> agnAverage<-agnes(daisy(v),diss=TRUE,method="average")
> plot(agnSingle)
Hit <Return> to see next plot: 
Hit <Return> to see next plot: 
> plot(agnComplete)
Hit <Return> to see next plot: 
Hit <Return> to see next plot: 
> plot(agnAverage)
Hit <Return> to see next plot: 
Hit <Return> to see next plot: 

技术分享

图 4簇之间相似度采用最小值的聚类结果树状图

技术分享

图 5簇之间相似度采用最大值的聚类结果树状图

技术分享

图 6 簇之间相似度采用平均值的聚类结果树状图

3.2分裂层次聚类(divisive hierarchical clustering)

本次实验中采用的是cluster包中的DIANA(Divisive Analysis)层次聚类算法。

> dv<-diana(v)
> plot(dv)

技术分享

图 7 分裂层次聚类结果树状图

聚类分析-R语言

标签:

原文地址:http://www.cnblogs.com/tsintian/p/4699020.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!