R中的距離與聚類

摘要: 聚類是建模的起點,在沒有目標的前提下,對研究對象按照距離分爲不用的組。組內的距離儘可能小,組間距離儘可能大;最常用的兩種聚類方法是系統聚類和k-means。

簡介:

聚類是建模的起點,在沒有目標的前提下,對研究對象按照距離分爲不用的組。組內的距離儘可能小,組間距離儘可能大;最常用的兩種聚類方法是系統聚類和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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章