簡體   English   中英

如何在R中為大型數據集創建聚類圖

[英]How create cluster plots for large datasets in R

我使用Kaufman和Rousseeuw的CLARA算法對R中N> 8 * 10 ^ 6的大型數據集進行聚類。算法本身的實現允許用戶通過將采樣大小限制為n = 100來控制執行時間。

但是,似乎R中對plot()函數的使用將所有數據對象都包含到繪圖中,這導致處理時間非常長且繪圖非常擁擠(請參見下面的可重現示例)。

從理論上講,應該只繪制來自CLARA的最佳樣本,而不是N 是否有針對此的實現,或者我該如何解決此問題?

## generate 2.5 mio objects, divided into 2 clusters.
x <- rbind(cbind(rnorm(10^6,0,0.5), rnorm(10^6,0,0.5)),
           cbind(rnorm(1.5*10^6,5,0.5), rnorm(1.5*10^6,5,0.5)))

library("cluster")
# get clusters solution
clara.x<-clara(x,k=2,sampsize = 100)
# see medoids
clara.x$medoids

# plot the cluster solution
plot(clara.x) # takes long time. creates crowded plot
clusplot(clara.x) # did not finish

在此處輸入圖片說明

我對CLARA方法不熟悉,因此該答案直接回答了您有關如何“從CLARA繪制最佳樣本”的問題。

快速瀏覽?clara.object可以發現在sample組件中找到了最終分區中使用的樣本的個案編號,因此您可以通過以下方式恢復觀察結果:

best_samp <- x[clara.x$sample, ]

輸出:

par(mfrow = c(1, 2))
plot(best_samp, main = "scatterplot")
clusplot(clara(best_samp, k = 2, sampsize = nrow(best_samp)),
  main = "clusplot")

在此處輸入圖片說明

首先,好像clara對象的plot()提供了兩個圖,第一個與clusplot()返回的圖相同。 如果前者完成但后者沒有完成,我猜那僅僅是因為您阻塞了情節歷史。 如果將大塊圖保存為png,則不會遇到此問題。 他們仍然需要一段時間,但不會干擾您正在執行的其他操作。

關於減少繪制點的數量,我們可以通過調整clara.x的列表元素來clara.x 您只需要選擇要繪制的點即可。 在下面的示例中,我僅使用clara方法中的示例。 但是,如果您想繪制更多內容,則可以使用sample()或其他方式進行選擇:

# Manually shrinking clara object
samp <- clara.x$sample
clara.x$data <- clara.x$data[samp, ]
clara.x$clustering <- clara.x$clustering[samp]
clara.x$i.med <- match(clara.x$i.med, samp) # point medoid indx to samp

# plot the cluster solution
clusplot(clara.x)

一種妙處是,類固醇樣本必須始終處於您選擇繪制的任何索引中,否則上面的第5行將不起作用。 為了確保對於任何給定的samp ,在上面第二行之后添加以下內容:

samp <- union(samp, clara.x$i.med)

附錄:剛剛看到的第一個答案與我的不同。 他建議重新計算聚類。 我的方法的一個好處是它保持了原始的聚類計算,並且僅調整您繪制的點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM