簡介:
聚類是建模的起點,在沒有目標的前提下,對研究對象按照距離分爲不用的組。組內的距離儘可能小,組間距離儘可能大;最常用的兩種聚類方法是系統聚類和k-means;
系統聚類是基於距離的聚類,計算量相對較大;相比之下k-means因計算量小,佔內存小,方法簡單而應用範圍更廣,尤其是在目前數據量比較大的情況下。
系統聚類:
系統聚類的思想是把每個樣本看成一類,計算兩兩之間的距離,把距離最近的兩個樣本合併爲一個新類,計算新類與其他樣本的距離,對距離最近的再次合併,重複此過程,直到所有樣本合併爲一類;系統聚類的關鍵點爲距離和不同量綱數據的標準化。
系統聚類主要函數介紹:
基於iris數據集的實例:
k-means聚類:
k-means分類的思想是:先粗略分一下類,然後按照某種最優原則修改不合理的分類,直至分類趨於合理。
(iris.km <-kmeans(iris,3))
K-means clustering with 3 clusters of sizes 50, 62, 38
Cluster means:
Sepal.Length Sepal.Width Petal.Length Petal.Width
1 5.006000 3.428000 1.462000 0.246000
2 5.901613 2.748387 4.393548 1.433871
3 6.850000 3.073684 5.742105 2.071053
## 聚類後的類標號,因爲iris數據按照類別排列,發現2與3類別相對模糊;類別1聚類效果較好
Clustering vector:
[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[46] 1 1 1 1 1 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2
[91] 2 2 2 2 2 2 2 2 2 2 3 2 3 3 3 3 2 3 3 3 3 3 3 2 2 3 3 3 3 2 3 2 3 2 3 3 2 2 3 3 3 3 3 2 3
[136] 3 3 3 2 3 3 3 2 3 3 3 2 3 3 2
## 基於方差變異分解的思想,組間方差越大效果越好;
Within cluster sum of squares by cluster:
[1] 15.15100 39.82097 23.87947
(between_SS / total_SS = 88.4 %)
## 聚類結果中的組件,可類似看成list中的元素;
Available components:
[1] "cluster" "centers" "totss" "withinss" "tot.withinss" "betweenss"
[7] "size"
plot(iris[c("Sepal.Length", "Sepal.Width")], col = km$cluster)
## 畫聚類的中心
points(km$centers[,c("Sepal.Length", "Sepal.Width")], col = 1:3,pch = 8, cex=2)
聚類的最終目的是生成優良的”簇“,我理解簇是數據業務層面的理解;做一個好的聚類可能要有多輪循環,基於現有的數據聚類,簇評估及發現線索,基於新發現的線索對數據進行處理再次聚類,這其中可能包含數據指標的再提取、離異點的刪除、數據的變換等。
本文僅介紹比較常見的兩種聚類方法。
參考資料:
[1] 統計建模與R軟件
[2] Rdatamining
|