2013-07-06 56 views
0

我有一堆數據(x,y),我想要聚類(比如60分)。但是,由於數據的性質,一些羣集可能非常小(1-2分),而其他羣集可能包含很多點(5-6)。由於固有的隨機起點,運行k-means算法會產生非唯一的質心值。我知道每個星團的中心在y方向上應該至少相距y。 (x相對不重要)因此,在運行我的kmeans之後,如果任何2個集羣的中心位於'y'內,我想重新運行kmeans算法,直到獲得我的標準。而且,如果沒有收斂,則可以緩慢減少聚類的數量。我如何確保列表中的實數至少相差'y'

我該如何去做R?

回答

1

你的問題沒有意義:y是一個變量,還是給定維數中簇之間的最小距離?

這就是說,這是刺傷它。集羣的中心位於您的k-means fit的組件$centers中。因此,您可以重複該過程,直到您在第012個維度中的中心距離至少爲給定距離時爲止。

repeat { 
    m <- kmeans(df, k) 
    cy <- m$centers[, 2] 
    cy_diff <- diff(sort(cy)) 
    if(all(cy_diff > min_dist)) break 
} 

更換dfkmin_dist適合您的數據。這在統計上都是可疑的海事組織,但這是CrossValidated的問題。

+0

y將是一個用戶輸入值,該值強制中心始終在y方向上被值y隔開。謝謝,那段代碼解決了我的問題。 – CKtalon

相關問題