2011-03-14 114 views
1

從R-名單上前面question,我看到了檢查包兩種方法是在加載:如何查找kmeans中用於創建集羣的參數?

ls("package:ts") 
lsf.str("package:ts") 

在我的情況,我想討論的kmeans輸出是什麼,這是一個功能在stats包,所以我用:

lsf.str("package:stats") 

不過,我不知道如何檢查什麼是從這個命令返回。我想確定先前聚類中使用的參數,以便我可以將它們應用於其他數據集。在哪裏可以找到作爲此功能一部分存儲的參數?

+1

如果您想知道函數做了什麼以及返回的結果,請查看在它的幫助頁面「?kmeans」。如果您想查看源代碼,那麼只需在提示符下運行kmeans(不帶圓括號) - 它將顯示代碼的版本(無評論等)。如果你想檢查'kmeans()'返回的對象,運行example:'example(kmeans)',然後執行'str(cl)'和'names(cl)'。但通過它的聲音,我不認爲這會有所幫助 - 你似乎建議你想要預測新數據集將落入哪些簇,而且你不能使用'kmeans()'來做到這一點想做? –

+0

啊,我明白了;謝謝你的解釋。你如何看評論的源代碼? – djq

+1

如果有的話,它會在R源代碼壓縮包或svn資源庫中https://svn.r-project.org/R/例如:http://svn.r-project.org/R/ trunk/src/library/stats/R/kmeans.R但在這種情況下沒有任何註釋來解釋代碼的作用... –

回答

3

kmeans幫助頁面價值部分列出了對象的格式返回BYT他功能:

類的「‘k均值’」,其具有一個「打印」的方法和一個對象是一個 列表與組件:

簇:指示每個點被分配的簇爲 的整數向量(從 '1:k')。

中心:聚類中心矩陣。

範圍內:每個羣集的 平方的羣集內總和。

totss:正方形內的總羣內總和 。

tot.withinss:總體羣內總和 正方形,即 'sum(withinss)'。

betweenss: 方塊之間的羣集總和。

大小:每個羣集中的點數。

一般來說,你也可以直接從您的kmeans對象與names功能列出這些值:

R> names(km) 
[1] "cluster"  "centers"  "totss"  "withinss"  
[5] "tot.withinss" "betweenss" "size"  

從值的幫助頁面的描述,我想說的是,用於參數聚類不會存儲在結果對象中。因此,如果您只能訪問得到的kmeans對象而不是原始函數調用,那麼我會說這些參數會丟失,不幸的是...

1

如果您輸入kmeans,您將獲得該方法的源代碼,可在pastebin處以http://pastebin.com/6VnnhU7J獲得。我不確定你的參數是什麼意思,因爲這些參數是作爲參數傳入的(x,center,iter.max = 10,nstart = 1,algorithm = c(「Hartigan-Wong」,「Lloyd」,「Forgy」 ?「麥奎」),你可以很方便地訪問它們(什麼?你原來叫k均值含)

+0

我最初稱爲kmeans,如下所示:fit < - kmeans(mydata ,3)'。我希望我可以將相同的標準應用於另一個數據集以生成更多的簇(例如,如果這是一個樹分類算法,我可以說所有值<0.5都在簇1中,等等)。 – djq

+1

我想你可以拿出擬合的'中心「部分,計算新數據點和已識別聚類中心之間的歐幾里德距離,並將每個數據點分配到最近的聚類中心?但是請注意,如果您將所有數據(新舊數據)集中在一起,則無需獲得與您所得到的結果相同的結果。 –

+0

也許我正在用這個評論進入新的問題領域,但這是一個好方法嗎?一般來說,我對集羣非常陌生,但我不確定這樣做的最佳方式是什麼。 – djq