如何计算Facebook中两个用户的相似度?

时间:2012-11-30 13:13:38

标签: algorithm similarity

我正在开展一个关于数据挖掘的项目。我的公司给了我600万个Facebook的虚拟客户信息。我被分配找出任何两个用户之间的相似性。任何人都可以给我一些如何处理大型社区数据的想法吗?在此先感谢:)

问题:我使用状态信息&主题标签信息(主题标签是用户突出显示的那些单词)作为衡量两个不同用户之间相似性的两个标准。由于用户数量众多,特别是可能存在数百万个标签和数据。每个用户的状态。谁能告诉我一个快速计算两个用户之间相似性的好方法?我曾尝试使用TF-IDF计算两个不同用户之间的相似性,但似乎不可行。任何人都可以有一个非常超级的算法或好的想法,可以让我快速找到用户之间的所有相似之处?

例如:

user A's hashtag = `{cat, bull, cow, chicken, duck}`
user B's hashtag =`{cat, chicken, cloth}` 
user C's hashtag = `{lenovo, Hp, Sony}`
显然,C与A没有关系,因此没有必要计算与浪费时间的相似性,我们可以在计算相似度之前先滤除所有那些不相关的用户。实际上,超过90%的总用户与特定用户无关。如何使用hashtag作为标准来快速找到那些潜在的类似用户组A?这是一个好主意吗?或者我们直接计算A和所有其他用户之间的相对相似度?什么算法是问题的最快和定制算法?

1 个答案:

答案 0 :(得分:11)

用户矢量表示

使用您定义的内容即可。您还可以添加facebook likes,这是用户兴趣的良好表现。

相似度函数

cosine distanceJaccard相似性适合您的情况。

为授予用户

查找类似用户

K-d Tree接近

首先构造k-d树,然后对于任何给定用户,您可以为该用户启动查询,kd-tree能够基于相似性函数返回k-nearest-neighbor。 c ++中的一个很好的实现是here

locality-sensitive-hashing方法

您将用户哈希到不同的存储桶。类似用户更有可能被一起散列。因此,对于类似的用户搜索,您只比较同一个存储桶中的用户。 请查看以下示例:How to understand Locality Sensitive Hashing?

clustering方法

尝试像k-means这样的群集算法。这可能是您在少量群集中对用户进行分组的第一步,然后您可以在组中的所有用户对之间进行O(n^2)比较。

collaborative-filtering接近。

将这些喜欢或主题标签视为用户喜欢的项目。您可以尝试协同过滤方法。对于数百万用户,您可能希望使用一些基于map-reduce的实现,例如mahout