我正在尝试使用 minhash 来生成集群和相似性,并且我主要使用来自这些资源的想法。
- http://www2007.org/papers/paper570.pdf
- https://chrisjmccormick.wordpress.com/2015/06/12/minhash-tutorial-with-python-code/
我正在使用的数据包括用户和项目之间的交互。有 220 万不同的用户和 4.4 亿不同的项目。在所有数据中,只有 905M 记录,因此非常稀疏。
在我的方法中,我通过重新排序项目(其中有 440M)来计算每个用户的 H 最小哈希值。用户有广泛的项目交互。互动次数最多的用户为 250 万次互动,最低的是 1 次互动,平均为 403 次,中位数仅为 26 次。
在谷歌关于谷歌新闻的文档中,他们建议连接 2-4 个键(LSH)并执行 10-20 次。我想当用户与较少量的项目(如新闻文章)进行交互时,这很有效,但对于我正在做的事情来说,它非常低。当我为具有 1,000 多次交互的用户测试此数量的键时,许多用户没有任何连接的 min 与另一个用户匹配。这是一个问题,因为我可以手动计算其中一些用户的 cosine 或 jaccard 相似度,并查看我需要的可接受的相似度。通过不连接散列键并使用多达 200 个,我发现了更好的结果。
对于我的大多数散列键组,224 万用户大约有 200 万个不同的散列键。因此,碰撞的数量相当少。
你们有什么增加聚类数量的技巧吗?我正在考虑使用 1,000 个哈希键并在用户匹配多个时配对用户。提前致谢。