[英]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對象的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.