|
聚類分析(Cluster analysis)是一組將研究對(duì)象分為相對(duì)同質(zhì)的群組(Clusters)的統(tǒng)計(jì)分析技術(shù)。 聚類分析區(qū)別于分類分析(Classification analysis) ,前者是無(wú)監(jiān)督學(xué)習(xí),而后者是有監(jiān)督學(xué)習(xí)。 無(wú)監(jiān)督學(xué)習(xí)也就是預(yù)先沒(méi)有類別的標(biāo)準(zhǔn),K-means方法是最常見(jiàn)的聚類方法之一,在R語(yǔ)言的kmeans()函數(shù)中,聚類數(shù)目的參數(shù)centers是必須人為輸入的。那么究竟如何確定聚類的數(shù)目呢?這里引用一句話(參考文獻(xiàn)1)"While there are no best solutions for the problem of determining the number of clusters to extract...",這里的潛臺(tái)詞是目前有很多方法,只是不知道選哪種。Anyway,大家知道有哪些方法嗎? 下面通過(guò)一個(gè)實(shí)例對(duì)幾種常見(jiàn)確定聚類數(shù)目的方法進(jìn)行介紹。 數(shù)據(jù) 收集了96例患者的兩個(gè)生化指標(biāo)(a、b),研究者擬根據(jù)a、b兩個(gè)指標(biāo)將96例患者分類若干組,進(jìn)而對(duì)不同的組深入分析,制定不同的治療方案。a、b兩個(gè)指標(biāo)的關(guān)系如下圖(下面是模擬數(shù)據(jù),實(shí)際情況通常沒(méi)有那么明顯的距離)。那么,我們?cè)摼鄱嗌兕惸兀?/div> set.seed(2018) n=100;g=6 mydata=data.frame(a=unlist(lapply(1:g,function(i) rnorm(n/g, runif(1)*i^2))), b=unlist(lapply(1:g,function(i) rnorm(n/g, runif(1)*i^2)))) mydata=scale(mydata) 1. 組內(nèi)平方和 該方法是畫出不同聚類數(shù)目(通常是1到10)對(duì)應(yīng)的組內(nèi)平方和,以組內(nèi)平方和基本不再明顯變化為標(biāo)準(zhǔn)(較為主觀),從而確定聚類的數(shù)目。如下圖,我們可以看到組內(nèi)平方和在聚類數(shù)目為5之后,基本不再變化,所以可以確定聚類數(shù)目為5。 ss=(nrow(mydata)-1)*sum(apply(mydata,2,var)) for(i in 2:10){ss[i]=kmeans(mydata,centers=i)$tot.withinss} plot(1:10,ss,type="b",xlab="聚類數(shù)目",ylab="組內(nèi)平方和") 2. Medoids周圍分類法 這個(gè)方法的操作比較簡(jiǎn)單,顧名思義就是通過(guò)partitioning around medoids來(lái)估計(jì)最優(yōu)的聚類數(shù)目。從下圖的橢圓數(shù)目可以看出聚類數(shù)目應(yīng)該為5。 library(fpc) library(cluster) fit=pamk(mydata) plot(pam(mydata,fit$nc)) 3. Calinsky準(zhǔn)則 Calinsky是一個(gè)定量的評(píng)價(jià)指標(biāo),該值越大越好。下圖的右邊可以看出Calinsky較大值對(duì)應(yīng)的聚類數(shù)目為5。 library(vegan) fit=cascadeKM(mydata,inf.gr=1,sup.gr=10,iter=1000) plot(fit,sortg=TRUE,grpmts.plot=TRUE) 4. BIC 沒(méi)錯(cuò),此處的BIC就是貝葉斯信息準(zhǔn)則(Bayesian Information Criterion),但與其用于模型的擬合判斷(越小越好)不同的是,這里用于判斷聚類數(shù)目的判斷標(biāo)準(zhǔn)為越大越好。如下圖,右下角的圖例表示各種不同的模型,從折線可以看出,所有的模型都在聚類數(shù)目為5時(shí),BIC取得較大。 library(mclust) fit=Mclust(mydata) plot(fit) 5. AP法 AP表示Affinity propagation的意思,旨在通過(guò)Affinity propagation的方法估計(jì)最優(yōu)的聚類數(shù)目。如下圖,左側(cè)和上側(cè)的彩色帶的顏色種類表示聚類的數(shù)目,為5。 library(apcluster) fit=apcluster(negDistMat(r=2),mydata) heatmap(fit) 6. 多目標(biāo)決策 NbClust函數(shù)提供30種的判斷指標(biāo),我們可以用類似投票的原理,看看通過(guò)30種指標(biāo)選出的最優(yōu)聚類數(shù)目。如下圖,最后一句表示,聚類數(shù)目應(yīng)該取3,這個(gè)結(jié)果與前述所有結(jié)果不一致,根據(jù)原始數(shù)據(jù)的情況,這個(gè)方法不太可靠,建議選擇前述的方法。 library(NbClust) fit=NbClust(mydata,min.nc=2,max.nc=10,method="kmeans",index="alllong") 參考文獻(xiàn) https://www./advstats/cluster.html https:///questions/15376075/cluster-analysis-in-r-determine-the-optimal-number-of-clusters
|
|
|