聚類方法用于識(shí)別從營(yíng)銷,生物醫(yī)學(xué)和地理空間等領(lǐng)域收集的多變量數(shù)據(jù)集中的相似對(duì)象。它們是不同類型的聚類方法,包括:
劃分方法
分層聚類
模糊聚類
基于密度的聚類
基于模型的聚類
演示數(shù)據(jù)集:名為USArrest的內(nèi)置R數(shù)據(jù)集
刪除丟失的數(shù)據(jù)
縮放變量以使它們具有可比性
# 讀取數(shù)據(jù)
my_data <- USArrests %>%
na.omit() %>% #刪除缺失
scale() # 標(biāo)準(zhǔn)化
# 瀏覽部分?jǐn)?shù)據(jù)
head(my_data, n = 3)
## Murder Assault UrbanPop Rape
## Alabama 1.2426 0.783 -0.521 -0.00342
## Alaska 0.5079 1.107 -1.212 2.48420
## Arizona 0.0716 1.479 0.999 1.04288
get_dist()
:用于計(jì)算數(shù)據(jù)矩陣的行之間的距離矩陣。與標(biāo)準(zhǔn)dist()
功能相比,它支持基于相關(guān)的距離測(cè)量,包括“皮爾遜”,“肯德爾”和“斯皮爾曼”方法。
fviz_dist()
:用于可視化距離矩陣
res.dist <- get_dist(U
gradient = list(low = "#00AFBB", mid = "white", high = "#FC4E07"))
算法是將數(shù)據(jù)集細(xì)分為一組k個(gè)組的聚類技術(shù),其中k是分析人員預(yù)先指定的組的數(shù)量。
k-means聚類的替代方案是K-medoids聚類或PAM(Partitioning Around Medoids,Kaufman和Rousseeuw,1990),與k-means相比,它對(duì)異常值不太敏感。
以下R代碼顯示如何確定最佳簇?cái)?shù)以及如何在R中計(jì)算k-means和PAM聚類。
確定最佳簇?cái)?shù)
fviz_nbclust(my_data, kmeans, method = "gap_stat")
計(jì)算并可視化k均值聚類
set.seed(123)
fviz_cluster(km.res, data = my_data,
ellipse.type = "convex",
palette = "jco",
ggtheme = theme_minimal())
pam.res <- pam(my_data, 3)
fviz_cluster(pam.res)
分層聚類是一種分區(qū)聚類的替代方法,用于識(shí)別數(shù)據(jù)集中的組。它不需要預(yù)先指定要生成的簇的數(shù)量。
# 層次聚類
res.hc <- USArrests %>%
scale() %>% # 標(biāo)準(zhǔn)化數(shù)據(jù)
hclust(method = "ward.D2") # 計(jì)算層次聚類
# 可視化
fviz_dend(res.hc, k = 4, # 分成4個(gè)組
color_labels_by_k = TRUE,
rect = TRUE
)
為了評(píng)估聚類傾向,可以使用Hopkins的統(tǒng)計(jì)量和視覺方法。
Hopkins統(tǒng)計(jì):如果Hopkins統(tǒng)計(jì)量的值接近1(遠(yuǎn)高于0.5),那么我們可以得出結(jié)論,數(shù)據(jù)集是顯著可聚類的。
視覺方法:視覺方法通過(guò)計(jì)算有序相異度圖像中沿對(duì)角線的方形黑暗(或彩色)塊的數(shù)量來(lái)檢測(cè)聚類趨勢(shì)。
R代碼:
iris[, -5] %>%
scale() %>% # 標(biāo)準(zhǔn)化數(shù)據(jù)
get_clust_tendency(n = 50, gradient = gradient.color)##
## [1] 0.8
##
set.seed(123)
res.nbclust <- USArrests %>%
scale() %>%
(distance = "euclidean",
min.nc = 2, max.nc = 10,
method = "complete", index ="all") # Visualize
fviz_nbclust(res.nbclust, ggtheme = theme_minimal())## Among all indices:
# ===================
# * 2 proposed 0 as the best number of clusters
# * 1 proposed 1 as the best number of clusters
# * 9 proposed 2 as the best number of clusters
# * 4 proposed 3 as the best number of clusters
# * 6 proposed 4 as the best number of clusters
# * 2 proposed 5 as the best number of clusters
# * 1 proposed 8 as the best number of clusters
# * 1 proposed 10 as the best number of clusters
#
# Conclusion
# =========================
# * According to the majority rule, the best number of clusters is 2 .
在下面的R代碼中,我們將計(jì)算和評(píng)估層次聚類方法的結(jié)果。
計(jì)算和可視化層次聚類:
res.hc <- iris[, -5] %>%
scale() %>%
("hclust", k = 3, graph = FALSE)
(res.hc, palette = "jco",
rect = TRUE, show_labels = FALSE)
檢查輪廓圖:
(res.hc)## cluster size ave.sil.width
# 1 1 49 0.63
# 2 2 30 0.44
# 3 3 71 0.32
哪些樣品有負(fù)輪廓?他們更接近什么集群?
Silhouette系數(shù)
sil <- res.hc$silinfo$widths[, 1:3]
#負(fù)輪廓系數(shù)
neg_sil_index <- which(sil[, 'sil_width'] < 0)
sil[neg_sil_index, , drop = FALSE]## cluster neighbor sil_width
# 84 3 2 -0.0127
# 122 3 2 -0.0179
# 62 3 2 -0.0476
# 135 3 2 -0.0530
# 73 3 2 -0.1009
# 74 3 2 -0.1476
# 114 3 2 -0.1611
# 72 3 2 -0.2304
分層K均值聚類:一種改進(jìn)k均值結(jié)果的混合方法
HCPC:主成分上的分層聚類
模糊聚類也稱為軟聚類方法。標(biāo)準(zhǔn)聚類方法(K-means,PAM),其中每個(gè)觀察僅屬于一個(gè)聚類。這稱為硬聚類。
在基于模型的聚類中,數(shù)據(jù)被視為來(lái)自兩個(gè)或多個(gè)聚類的混合的分布。它找到了最適合模型的數(shù)據(jù)并估計(jì)了簇的數(shù)量。
DBSCAN是Ester等人引入的聚類方法。(1996)。它可以從包含噪聲和異常值的數(shù)據(jù)中找出不同形狀和大小的簇(Ester等,1996)。基于密度的聚類方法背后的基本思想源于人類直觀的聚類方法。
R鏈中的DBSCAN的描述和實(shí)現(xiàn)
非常感謝您閱讀本文,有任何問(wèn)題請(qǐng)?jiān)谙路搅粞裕?/strong>
聯(lián)系客服