2014-03-06 60 views
0

上下文:在Legendre & Legendre的數值生態學教科書中,他們建議在進行K均值分割之前分配一個初始啓動配置(或「種子組」),因爲該算法非常敏感到初始條件。 (其中最初的起始配置通過Ward的聚類或生態直覺來確定)將開始配置分配給r中的k均值分區

問:我如何給K-means方法中的初始分組?什麼具體的Kmeans函數可以處理初始分組?

這是我的數據集snipet,列「seedgroup」定義了初始分組的因素。我要告訴R鍵採取站點C和G作爲起始配置爲組0,站點A,d,F,H爲組1,和站點B和E爲組2

 seedgroup RhodDec VaccVit VaccOxy RubuCam ChamCal 
SiteA   1 0.00 0.01 0.01 0.00 0.00 
SiteB   2 0.00 0.01 0.00 0.00 0.00 
SiteC   0 0.00 0.01 0.01 0.01 0.00 
SiteD   1 0.00 0.01 0.00 0.00 0.00 
SiteE   2 0.09 0.02 0.01 0.01 0.02 
SiteF   1 0.00 0.00 0.01 0.03 0.02 
SiteG   0 0.00 0.01 0.06 0.02 0.01 
SiteH   1 0.00 0.01 0.00 0.00 0.00 

謝謝!

回答

0

以下是一種方法。基數R中的kmeans(...)函數可以指定初始聚類中心。所以你可以根據seedgroup中暗示的分組來計算中心。調用數據集df

centers <- aggregate(df[,-1],by=list(df$seedgroup),mean) 
km  <- kmeans(df[,2:6],centers=centers[,2:6]) 
df  <- data.frame(cluster=km$cluster-1,df) 
df 
#  cluster seedgroup RhodDec VaccVit VaccOxy RubuCam ChamCal 
# SiteA  1   1 0.00 0.01 0.01 0.00 0.00 
# SiteB  1   2 0.00 0.01 0.00 0.00 0.00 
# SiteC  1   0 0.00 0.01 0.01 0.01 0.00 
# SiteD  1   1 0.00 0.01 0.00 0.00 0.00 
# SiteE  2   2 0.09 0.02 0.01 0.01 0.02 
# SiteF  1   1 0.00 0.00 0.01 0.03 0.02 
# SiteG  0   0 0.00 0.01 0.06 0.02 0.01 
# SiteH  1   1 0.00 0.01 0.00 0.00 0.00 

注意kmeans(...)返回1,基於集羣的數字,而你是從0開始。在這個有限的例子中,SiteB從集羣2→1移動,SiteC從0→1移動,這看起來是合理的基於數據。

+0

我正在尋找一種將其設置爲組的方式,以便輕鬆嘗試數據的不同轉換。用這種方法,我需要每次重新運行這些中心。無論如何,仍然有用,它只需要比我一直期待的更多的代碼行。 – user3386170