我有一个巨大的位向量列表(BV),我希望在群集中进行分组。
这个集群背后的想法是能够从每个集群中选择更晚的BV并将它们组合起来生成具有(几乎)全部(必须最大化)的BV。
例如,假设1表示应用程序为Up,0表示在特定时刻在节点X中关闭。我们想要找到应用程序Up的最小节点列表:
App BV for node X in cluster 1: 1 0 0 1 0 0
App BV for node Y in cluster 2: 0 1 1 0 1 0
Combined BV for App (X+Y): 1 1 1 1 1 0
我一直在检查不同的群集算法,但我确实找到了一个考虑到这种“补充”行为的算法,因为在这种情况下,BV的每一列都没有被引用到一个特征(仅在特定时间范围内表示向上或向下) )。
关于其他算法,如k-means或层次聚类,我不清楚我是否可以在聚类算法中包含对后期分组的这种考虑。
最后,我使用汉明距离来确定群集内和群集间距离,因为它似乎是二进制数据最合适的度量,但结果显示群集没有紧密分组并在它们之间分开所以我想知道我是否应用最合适的组/近似方法,或者即使我应该过滤先前分组的输入数据。
欢迎任何关于分组/聚类方法或过滤数据的线索或想法。
答案 0 :(得分:0)
这根本不像群集问题。
这些算法都不会对您有所帮助。
相反,我宁愿称之为匹配算法。但我认为它至少是NP难的(它类似于封面)才能找到真正的最佳值,所以你需要提出一个快速近似值。最适合您用例的内容。
你还没有指定(你写了+但可能不是你想要的)如何组合两个1。它是xor还是?也不可能合并两个以上,以及这样做的成本是多少。一种策略是为每个反向比特矢量找到最近邻居,并始终组合最佳对。