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)

clip_image002

图 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)

clip_image004

图 2 分类数K取3的结果

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

clip_image006

图 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: 

clip_image008

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

clip_image010

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

clip_image012

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

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

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

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

clip_image014

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

posted on 2015-08-03 12:24  agiser  阅读(15707)  评论(0编辑  收藏  举报