基于标签的聚类算法

时间:2013-02-14 14:31:35

标签: algorithm tags cluster-analysis

我希望根据标签聚集多个Feed。 一个典型的例子是twitter feed。每个Feed都有与之关联的用户定义标签。通过分析标签,是否可以将Feed聚类到不同的组中,并且可以根据如此多的标签来说明这么多的Feed。 一个例子是 -

  • Feed1 - 印度尼西亚的地震#earthquake #asia #bad
  • Feed2 - 我所在的地区发生了一场大地震#earthquake #bad
  • Feed3 - 我的父母去了新加坡#asia #tour
  • Feed4 - XYZ公司裁员很多人#XYZ #layoff #bear
  • Feed5 - XYZ越来越糟糕计划裁员#XYZ #layoff #bad
  • Feed6 - XYZ处于裁员狂欢#layoff #XYZ #worst

聚类后

  • #asia,#earthquake - Feed1,Feed2
  • #XYZ,#layoff - Feed4,Feed 5,Feed6

此处纯粹基于标签找到聚类。 是否有任何好的算法来实现这个

2 个答案:

答案 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),可能已按顺序排序。例如:

  • Feed1 :(亚洲 - 坏),(亚洲 - 地震),(地震),(亚洲 - 地震)
  • Feed2 :(地震发生)
  • Feed3:(asia-tour)
  • Feed4 :(承受裁员),(承担-XYZ),(裁员-XYZ),(承担裁员-XYZ)
  • Feed5 :( bad-layoff),(bad-XYZ),(layoff-XYZ),(bad-layoff-XYZ)
  • Feed6 :(裁员最差),(裁员-XYZ),(最差-XYZ),(裁员最差-XYZ)

然后反转映射:

  • (亚洲 - 坏):Feed1
  • (亚洲地震):Feed1
  • (地震):Feed1,Feed2
  • (亚洲 - 地震):Feed1
  • (asia-tour):Feed3
  • (熊市裁员):Feed4
  • ...
  • (layoff-XYZ):Feed4,Feed5,Feed6
  • ...

然后,您可以剔除频率高于某个阈值的所有条目。在这种情况下,如果我们采用频率阈值为2,那么您将使用Feed1和Feed2获得(地震),使用Feed4,Feed5和Feed6获得(layoff-XYZ)。

表现关注

这种天真的实现将具有极差的性能 - 每个馈送的标签数量呈指数级(更不用说空间要求)。但是,有多种方法可以应用启发式方法来改进这一点。例如:

  1. 通过扫描所有Feed(或随机选择的X Feed)确定最常用的X标记 - 这与每个Feed的标记数量呈线性关系。然后只考虑每个Feed最常用的Y标签。
  2. 确定所有(或大多数)标签的频率。然后,对于每个帖子,只考虑该帖子中最受欢迎的X标签。这可以防止你的某些帖子有15个标签的情况,从而产生了大量的组合,其中大部分都不会发生。
  3. 对于每个帖子,只考虑长度< = X的组合。例如,如果一个Feed有十五个标签,你可能会得到大量的组合,但是大多数组合的出现次数很少,尤其是很长的。因此,只考虑两个或三个标签的组合。
  4. 仅扫描随机选择的X个Feed。
  5. 希望这有帮助!