系統(tǒng)聚類法受方法限制不適合應用于量較大的數(shù)據(jù),而現(xiàn)在我們實際分析的數(shù)據(jù)往往都是大數(shù)據(jù),這一節(jié)講的快速聚類法kmeans則是可應用于大數(shù)據(jù)的一種聚類方法。
算法原理
kmeans法是一種快速聚類法,這種算法的基本思想是將每一個樣品分配給最近中心 (均值)的類中。知乎上一篇文章講kmeans算法很清楚:
- 假定我們要對N個樣本觀測做聚類,要求聚為K類,首先選擇K個點作為初始中心點;
- 接下來,按照距離(距離其實指的就是相似度)初始中心點最小的原則,把所有觀測分到各中心點所在的類中;
- 每類中有若干個觀測,計算K個類中所有樣本點的均值,作為第二次迭代的K個中心點;
- 然后根據(jù)這個中心重復第2、3步,直到收斂(中心點不再改變或達到指定的迭代次數(shù)),聚類過程結(jié)束。
至于kmeans的數(shù)學描述這篇文章講的也很清楚,感興趣的可以去讀讀,我這篇筆記就不多說了。
R語言使用與舉例
R中,使用函數(shù)kmeans()
進行快速聚類:
kmeans(x,centers,...)
- x 為數(shù)據(jù)矩陣或數(shù)據(jù)框;
- centers為聚類數(shù)或初始聚類中心。
舉例說明
> set.seed(123)
> x1 <- matrix(rnorm(1000,0,0.3),ncol=10) #均值0,標準差為0.3的100*10正態(tài)隨機矩陣
> x2 <- matrix(rnorm(1000,1,0.3),ncol=10) #均值1,標準差為0.3的100*10正態(tài)隨機矩陣
> X <- rbind(x1,x2) #形成200*10的隨機矩陣
> km <- kmeans(X,2)
> plot(X,pch=km$cluster)
kmeans_plot.png
聚類分析的一些問題
- 系統(tǒng)聚類分析的特點:綜合性、形象性、客觀性
- 關于kmeans算法:kmeans算法只有在類的均值被定義的情況下才能使用對于“噪聲”和孤立點是敏感的,這種數(shù)據(jù)對均值影響極大。
- 關于變量變換
有時候原始數(shù)據(jù)不適合直接進行聚類,可以把變量變換一下再做分析,如:- 平移變換:
;
- 極差變換:
- 標準差變換:
- 主成分變換
- 對數(shù)變換(適用于極差大時)
- 平移變換: