我正在开展一个关于数据挖掘的项目。我的公司给了我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和所有其他用户之间的相对相似度?什么算法是问题的最快和定制算法?
答案 0 :(得分:11)
使用您定义的内容即可。您还可以添加facebook likes
,这是用户兴趣的良好表现。
cosine distance或Jaccard相似性适合您的情况。
首先构造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。