2012-05-31 64 views
-2

我想對k均值聚類的輸入提出一些建議。 我對這個k-均值聚類(或爲上帝集羣)相對較新,發現此源代碼: k-means by Shyam Sivaraman 我可能想要使用這個JAVA,因爲我的主管要我改變和應用算法,而不是創建它由我自己從頭開始。 因此,根據代碼:有關k均值聚類的輸入建議(歡迎提供更多建議)

Vector dataPoints = new Vector(); 
dataPoints.add(new DataPoint(22,21,"data1")); 
dataPoints.add(new DataPoint(19,20,"data2")); 
dataPoints.add(new DataPoint(18,22,"data3")); 
... 

我知道到現在的是,它接受兩個變量的數據點(x和y)和數據名稱,在此基礎上下面的代碼:

public DataPoint(double x, double y, String name) { 
    this.mX = x; 
    this.mY = y; 
    this.mObjName = name; 

現在我想要的是將輸入更改爲接受文檔向量,因爲我正在進行文檔聚類。有關如何更改代碼的任何建議?換句話說,如果可能的話(代碼最後一個選項)。或者,如果你們在同一主題上找到任何鏈接,不妨分享一下。

期待任何建議傢伙。

回答

0

在最簡單的方法中,你必須計算document-term matrix

您的代碼在2D空間中進行向量(x,y)的聚類。你只需要將它擴展到N維空間(根據文檔項矩陣向量的維數)。

另外我建議看看TF*IDF weighting,它可以提高聚類結果。

+0

會是怎樣的維空間的最佳數量,請問? (我的問題可能聽起來很愚蠢btw,但我想學習) 謝謝你提出TF * IDF加權,但已經分配給我的其他同學去做,我只需要讓kmeans算法像基本一樣它是(也許我稍後會將它用於副項目) – John

+0

事實上,文檔項矩陣是一個稀疏矩陣。所以我建議你實現通用的方法來計算文檔向量之間的歐幾里德距離 – stemm

+0

哦,現在我明白了。我決定使用通用方法,因爲它很容易實現,特別是對於我的新手。謝了哥們 – John

0

我會建議使用n維矢量作爲輸入,以便您的實現更一般。

如果你想要一些實現的Java源代碼K-Means這是有效的,你可以檢查我的data mining software

它提供了幾種算法,包括K-Means和用於啓動算法的圖形界面。

最佳,

菲利普