2016-11-19 63 views
0

假設,我必須對應於5個類別個連續程序10天每小時數據羣集成員關係,創建爲:統計上幾天

library(xts) 
set.seed(123) 
timestamp <- seq(as.POSIXct("2016-10-01"),as.POSIXct("2016-10-10 23:59:59"), by = "hour") 
data <- data.frame(cat1 = rnorm(length(timestamp),150,5), 
         cat2 = rnorm(length(timestamp),130,3), 
         cat3 = rnorm(length(timestamp),150,5), 
         cat4 = rnorm(length(timestamp),100,8), 
         cat5 = rnorm(length(timestamp),200,15)) 
data_obj <- xts(data,timestamp) # creat time-series object 
head(data_obj,2) 

現在,每天我單獨進行集羣,看看這些類別相對於彼此表現使用簡單kmeans爲:

daywise_data <- split.xts(data_obj,f="days",k=1) # split data day wise 
clus_obj <- lapply(daywise_data, function(x){ # clustering day wise 
    return (kmeans(t(x), 2)) 
}) 

一旦集羣是結束了,我可視化在不同的10天羣集關係與

sapply(clus_obj,function(x) x$cluster) # clustering results 

,我發現結果

enter image description here

目測,很顯然,cat1cat3始終保持相同的羣集。類似地,cat4cat5在10個不同的日子裏大多在不同的羣中。

除了目視檢查,是否有任何自動的方法來收集這種類型的統計從這樣的聚類表


注意:這是一個虛擬的例子。我有一個包含連續100天80個類別的數據框。像上面這樣的自動總結會減少工作量。

回答

0

配對計數羣集評估措施顯示瞭解決此問題的簡單方法。

這些方法不是查看不穩定的對象集羣分配,而是查看兩個對象是否在同一個集羣中(稱爲「對」)。

所以你可以檢查這些對是否隨時間變化很大。由於k-means是隨機化的,你可能還想在每個時間片上運行幾次,因爲它們可能會返回不同的聚類!

然後你可以說例如系列1在90%的結果中與系列2處於同一簇中。等等。

+0

你的解釋是正確的,我想計算這個百分比。但是[維基百科](https://en.wikipedia.org/wiki/Cluster_analysis)中提到的外部評估指標似乎並不適用於我的案例,因爲我沒有基本事實(基準)。這個聚類是無監督的。您的進一步見解可能會幫助我進一步挖掘... –

+0

同樣的方法可用於比較兩個不同時間點的結果。大多數這些方法是對稱的,基本上它們是分區的相似性度量。 –

+0

我改寫了一下我的問題,並在[this]得到了答案(http://stackoverflow.com/q/40713096/3317829)堆棧溢出鏈接 –