聚類分析-R語言


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 分裂層次聚類結果樹狀圖


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM