我希望根据标签聚集多个Feed。 一个典型的例子是twitter feed。每个Feed都有与之关联的用户定义标签。通过分析标签,是否可以将Feed聚类到不同的组中,并且可以根据如此多的标签来说明这么多的Feed。 一个例子是 -
聚类后
此处纯粹基于标签找到聚类。 是否有任何好的算法来实现这个
答案 0 :(得分:5)
如果我正确理解了您的问题,您希望将标记聚合在一起,然后根据Feed中的标记将Feed放入这些群集中。
为此,您可以根据标记一起显示的Feed数量在标记之间创建相似性度量。对于你的例子,这将是这样的
#earthquake | #asia | #bad | ...
#earthquake 1 | 1/2 | 2/2
#asia 1/2 | 1 | 1/2
#bad 2/3 | 1/3 | 1
...
此处,(i,j)
的值等于frequency of (i,j)/frequency of (i)
。
现在,您在标签之间有一个相似性矩阵,几乎可以使用任何适合您需求的聚类算法。因为,在运行算法之前,标签的数量可能非常大并且难以估计簇的数量,我建议使用一些快速模块化聚类的分层聚类算法,这也非常快(See some details here)。但是,如果您对要将其分解的群集数量有一些估计,那么Spectral群集也可能很有用(See some details here)。
将标记聚类在一起后,您可以使用简单的方法将每个Feed分配给群集。这可以非常简单,例如,计算Feed中每个群集的标记数量,并为群集分配最大匹配标记数量。
如果您对群集策略很灵活,那么您也可以尝试以类似的方式将Feed聚类在一起,方法是根据Feed之间的公共标记数量创建Feed之间的相似性,然后对其应用聚类算法。相似矩阵。
答案 1 :(得分:2)
有趣的问题。我在这里做事,但我认为这会奏效。
对于每个Feed,请提供一个完整的标记组合列表(长度> = 2),可能已按顺序排序。例如:
然后反转映射:
然后,您可以剔除频率高于某个阈值的所有条目。在这种情况下,如果我们采用频率阈值为2,那么您将使用Feed1和Feed2获得(地震),使用Feed4,Feed5和Feed6获得(layoff-XYZ)。
这种天真的实现将具有极差的性能 - 每个馈送的标签数量呈指数级(更不用说空间要求)。但是,有多种方法可以应用启发式方法来改进这一点。例如:
希望这有帮助!