1. 程式人生 > >ML: 聚類算法R包-K中心點聚類

ML: 聚類算法R包-K中心點聚類

logs lib str ini rac 缺點 criterion spa mea

K-medodis與K-means比較相似,但是K-medoids和K-means是有區別的,不一樣的地方在於中心點的選取,在K-means中,我們將中心點取為當前cluster中所有數據點的平均值,在 K-medoids算法中,我們將從當前cluster 中選取這樣一個點——它到其他所有(當前cluster中的)點的距離之和最小——作為中心點。K-medodis算法不容易受到那些由於誤差之類的原因產生的臟數據的影響,但計算量顯然要比K-means要大,一般只適合小數據量。 K-medoids 主要運用到了R語言中cluster包中的pam函數

K中心點聚類


  • cluster::pam
  • fpc::pamk

cluster::pam


Usage: 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: 是聚類個數 ( positive integer specifying the number of clusters, less than the number of observations)

示例代碼

> newiris <- iris[,-5]
> library(cluster)
> kc <- pam(x=newiris,k=3)
> #kc$clustering
> #kc[1:length(kc)]
> 
> table(iris$Species, kc$clustering)
            
              
1 2 3 setosa 50 0 0 versicolor 0 48 2 virginica 0 14 36

小結:

針對K-均值算法易受極值影響這一缺點的改進算法.在原理上的差異在於選擇個類別中心點時不取樣本均值點,而在類別內選取到其余樣本距離之和最小的樣本為中心。

fpc::pamk


相比於pam函數,可以給出參考的聚類個數, 參考 kmenas 與 kmeansrun

Usage: pamk(data,krange=2:10,criterion="asw", usepam=TRUE, scaling=FALSE, alpha=0.001, diss=inherits(data, "dist"), critout=FALSE, ns=10, seed=NULL, ...)

示例代碼

newiris <- iris
newiris$Species <- NULL
library(fpc)
kc2 <- pamk(newiris,krang=1:5)
plot(pam(newiris, kc2$nc))

圖例

技術分享

fpc包還提供了另一個展示聚類分析的函數plotcluster(),值得一提的是,數據將被投影到不同的簇中

plotcluster(newiris,kc2$cluster)

技術分享

待驗證:

為什麽僅出現兩個聚類?

參考資料:


  • http://blog.csdn.net/helen1313/article/details/38111125

ML: 聚類算法R包-K中心點聚類