熱線電話:13121318867

登錄
首頁精彩閱讀R語言聚類算法比較
R語言聚類算法比較
2018-06-09
收藏

R語言聚類算法比較

在使用不同的聚類算法完成數據聚類操作后,我們可以對算法的性能進行評估,絕大多數情況下,我們即可以使用簇內距離也可以使用簇間距離作為評價標準。使用fpc算法包的cluster.stat函數來比較不同的聚類算法。

操作

導入fpc包,選擇層次聚類算法,距離計算采用single方法(最短距離法),將得到簇存放在hc_single中:

library(fpc)
single_c = hclust(dist(customer),method = "single")
hc_single = cutree(single_c,k = 4)

選擇層次聚類算,距離計算采用complete方法(最長距離法),將得到的簇存放在hc_complete:

complete_c = hclust(dist(customer),method = "complete")
hc_complte = cutree(complete_c,k = 4)
選擇k均值聚類算法,將得到的簇存放km對象中:

set.seed(22)
km = kmeans(customer,4)
獲得km聚類算法聚類結果的基本統計信息:

cs = cluster.stats(dist(customer),km$cluster)
通常我們習慣使用within.cluster.ss和avg.silwidth這兩個函數來驗證聚類算法:

cs[c("within.cluster.ss","avg.silwidth")]
$within.cluster.ss
[1] 61.3489

$avg.silwidth
[1] 0.4640587

將得到的不同方法生成聚類結果的統計信息并以列表顯示:

sapply(list(kmeans = km$cluster,hc_single = hc_single,hc_complte = hc_complte), function(c)cluster.stats(dist(customer),c)[c("within.cluster.ss","avg.silwidth")])
                  kmeans    hc_single hc_complte
within.cluster.ss 61.3489   136.0092  65.94076  
avg.silwidth      0.4640587 0.2481926 0.4255961
原理
聚類結果的驗證通常采用兩種技術:簇內距離和簇間距離。其中,簇間距離距離越大,聚類效果越好,而簇內距離越小,聚類效果越理想。使用fpc包中的cluster.stat函數來計算訓練好的聚類對象的相關統計信息。
從輸出結果可以得知,within.cluster.ss計算的是每個聚類內部的距離平方程,而avg.silwidth計算的是平均輪廓值。within.cluster.ss的計算結果體現了同一個簇之間對象的相關程度,該值越小,簇內對象的相關性越大。而avg.silwidth值則同時考慮了簇內對象的聚合度和簇內對象的聚合度簇間對象的分離度。數學上對于每個點x可以采用下列公式計算其輪廓系數:
輪廓系數(x) = [b(x) - a(x)]/max([b(x),a(x)])
其中,a(x)是點x到所有與它在同一簇中的其他點的平均距離,而b(x)則是點x到所有與它不在同一簇的點平均距離的最小值。通常輪廓系數取值范圍為0~1,越接近于1說明聚類效果越好。
從最后產生的結果可以知道,在within.cluster.ss和avg.silwidth測量長度下基于最長距離的層次聚類算法的聚類效果要優于最短距離層次聚類算法和k均值算法。

數據分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數據分析師資訊
更多

OK
客服在線
立即咨詢
日韩人妻系列无码专区视频,先锋高清无码,无码免费视欧非,国精产品一区一区三区无码
客服在線
立即咨詢