我有一個聚類算法存儲羣集在HashMap<String, ArrayList<String>>
。我如何將HashMaps與不同的密鑰進行比較?
我需要將它與存儲在另一個HashMap<String, ArrayList<String>>
中的地面實況進行比較。
鍵不一樣,因爲數組是通過增量聚類創建的,所以我想知道如何將原始集羣與生成的集羣進行比較。
我使用NMI和BCUBED作爲聚類評價措施,但我的問題是如何指向同一個集羣(ArrayList的),如果他們有不同的鍵..
任何想法?
我有一個聚類算法存儲羣集在HashMap<String, ArrayList<String>>
。我如何將HashMaps與不同的密鑰進行比較?
我需要將它與存儲在另一個HashMap<String, ArrayList<String>>
中的地面實況進行比較。
鍵不一樣,因爲數組是通過增量聚類創建的,所以我想知道如何將原始集羣與生成的集羣進行比較。
我使用NMI和BCUBED作爲聚類評價措施,但我的問題是如何指向同一個集羣(ArrayList的),如果他們有不同的鍵..
任何想法?
我不是100%清楚你的班級是如何設置的,以及HashMap<String, ArrayList<String>>
是如何工作的,但我的意思是你應該有一把鑰匙。所以當你分配集羣時,你可以做這樣的事情。
原始數據:
Hashmap<String, ArrayList<String>> = key: Array Of Original Data
您將存儲的是在每個集羣的功能:
HashMap<String, ArrayList<String>> = Cluster Key: Array of Original Data Keys
這會給你一個機制,以循環通過在每個羣集對象並仍然保持原始對象的狀態,這是否有道理?你會最終再能寫一些類似於:
for(String clusterKey : clusterMap.keySet()){
for(String itemKey : clusterMap.get(clusterKey)){
calculateDistance(centroid, originalMap.get(itemKey);
}
}
這是一個過於簡單化,但應該讓你在正確的方向前進。
編輯 我也承擔人有重心向集羣自身的HashMap中。因此,作爲calculateDistance(centroidMap.get(clusterKey), originalMap.get(itemKey));
我想你可以創建一個反向的HashMap其中KeyObj是一個ArrayList和計數器的新對象calculateDistance()
方法可以rewritted。
在反向HashMap中,密鑰的計數器將是相等的ArrayList的數量。
現在比較算法很簡單: 迭代第一個HashMap的值並搜索該值作爲新HashMap的關鍵字。如果找到密鑰並且計數器爲0,或者找不到密鑰,則返回false。否則,請計數 - 並繼續下一次迭代。 最後,返回true。
嗨,只有在keyObj完全相同的情況下才能工作嗎?我的意思是,同樣的參考?或者也是相同的對象,但存儲在內存中的2個不同點是好的? – user680406 2011-04-05 13:23:44
我實際上並沒有看到這可能是如何工作的,因爲每個KeyObj是具有所有文檔ID的數組列表,可能與原始數據不同。我的意思是,這實際上是我想測量的錯誤。如果不一樣,我怎樣才能把它當作鑰匙使用? – user680406 2011-04-05 13:25:45
另外,我不知道分配給計數器的值是多少,因爲我只能檢查每個羣集在迭代時共有多少文檔,但不會提前。 – user680406 2011-04-05 13:28:10
那麼你是說,'地面實況'散列圖通常是來自增量聚類地圖的適當超集? – MeBigFatGuy 2011-04-05 12:14:09
你是什麼意思的關鍵是不一樣的?它們不屬於同一類型。 – 2011-04-05 12:14:12
@MeBigFatGuy因爲聚類算法應該給出原始的HashMap,但結果從來都不是完美的,所以我應該測量這些聚類與原始聚類的距離。所有文檔(ArrayList對象)都存在,但它們可能位於不同的集羣中,或者可能存在更多或更少的集羣(或多或少的HashMap項目)。 –
user680406
2011-04-05 12:22:51