2011-11-19 62 views
0

什麼是最好的集羣算法用於聚集超過100個維度(有時甚至是1000)的數據。如果您知道C,C++或特別是C#中的任何實現,我將不勝感激。高維數據集羣

+1

關於多少個數據點,您擁有多少個羣集?是否有一些點已知類標籤?如何使用羣集?對於如此廣泛的可能性,沒有「最佳算法」。也許閱讀[聚類分析]的上半部分(http://en.wikipedia.org/wiki/Cluster_analysis),然後再詢問。 – denis

回答

3

這很大程度上取決於您的數據。見維度的常見問題的詛咒。最近的研究(Houle等人)表明,你不能真正走過數字。可能有成千上萬的維度和數據集羣,當然,甚至有一維數據只是不集羣。這主要是信號與噪聲的問題。這就是爲什麼例如TF-IDF向量的聚類工作得相當好,特別是對於餘弦距離。

但關鍵的一點是,你第一個需要了解你的數據的性質。然後,您可以選擇適當的距離函數,權重,參數和算法。

尤其是,您還需要知道什麼構成了您的羣集。有很多定義,特別是對於高維數據。它們可能在子空間中,它們可能會或可能不會被任意旋轉,它們可能重疊或不重合(例如,k-表示不允許重疊或子空間)。

0

好吧,我知道一個叫做矢量量化的東西,它是一個很好的算法,可以將多個維度聚集起來。

0

我已經在數據的100維上使用了k-means,這是非常常見的,所以我敢肯定,它們是任何語言的實現,最糟糕的情況 - 它很容易通過你自己來實現。

0

在嘗試對其進行聚類之前,可能還需要嘗試一些降維技術,如主成分分析或自動關聯神經網絡。它可以把一個巨大的問題變成一個更小的問題。

之後,去k-means或gaussians的混合物。

+0

你能告訴我關於神經網絡方法的一些信息嗎?但我認爲它必須經過培訓? –

+0

現在這可能已經老了,但我剛剛看到了這個。是的,就像任何網絡一樣,你需要訓練它。這個想法是,你使用N個節點的內部層,N << Dims,然後訓練它在輸出節點上重現輸入數據。這樣做,你迫使網絡放棄一些數據。最大限度地減少輸入和輸出之間的差異將確保保留最豐富的數據。例如:輸入(媽媽的身高,爸爸的身高,爸爸的眼睛顏色);輸出(孩子的身高),內部節點2.在訓練期間,眼睛顏色的權重歸零,因爲它是無關緊要的。 –

0

LMW-tree項目中的EM樹和K樹算法可以聚類這樣的高維問題。它用C++實現並支持許多不同的表示形式。

我們有新穎的算法聚類由LSH /隨機投影創建的二進制向量,或任何其他發射二進制向量,可通過海明距離進行比較的相似度。