2012-04-12 150 views
1

我有一組向量。載體有三種不同的類別, A,B和C.現在,我需要按照以下標準對它們進行聚類:自定義聚類算法

  1. 每個羣集中應該有最少1個和最多3個向量。
  2. 每個羣集中的所有向量應該是不同的類型。 .ie,一個簇不應該包含2個或更多相同類型A,B或C的向量。
  3. 如果這裏是一個包含一組向量的簇,那麼任意兩個向量之間的距離(比如說Eucledian距離)是小於預定義的閾值T.
  4. 如果含有2個或更多個載體(當然爲3的最大)的羣集,則它是強制性的,這些矢量中的一個是式A的

是否有任何現有的算法來執行這種類型的聚類?假設我需要從頭開始這樣做,那麼需要遵循哪些步驟來根據上述條件對載體進行聚類?

+2

我認爲你必須有一個沒有規定的標準,因爲你可以通過把每個向量放在一個單獨的集羣中來滿足那些給定的標準。你只是想盡量減少集羣的數量?另外,總共有多少個矢量? – 2012-04-12 12:03:02

+0

將每個矢量放在不同的羣集中?你能爲我澄清一下嗎?我總共有大約5000,10000和12000個A,B和C型載體。 – 2012-04-12 12:04:49

+0

使用給定的數字,通過擁有27000個羣集滿足您的標準。 5000具有單個A,10000具有單個B,12000具有單個C. – 2012-04-12 12:09:02

回答

1

你可以使用約束引擎來解決這種事情。類似choco包括支持您列出的所有約束(以及優化,因爲我猜如果你有歧義,你想要最小數量的集羣?)。

我不是巧克力的專家,但如果它有任何幫助我有notes我在學習的時候做出來的(這些都是在約束條件下解決的,但我昨晚做了優化工作,並且會很快添加)。有一個確定的學習曲線,但對於這樣複雜的事情,我認爲它不會再花時間學習,而不是自己寫一個解決方案(然後將來你會有一個新的一般工具,而不是一堆非常具體的代碼)

和巧克力不是獨一無二的 - 還有一堆 - google recently packaged some

+0

謝謝安德魯。只是另一個類似的簡單問題:如果我有一組矢量,我如何將它們聚類,使得在每個聚類中,任意兩個矢量之間的歐氏距離小於閾值?因此,最後,可能有矢量不屬於任何羣集。你知道現有的算法嗎? – 2012-04-13 06:39:08