选择minhash的哈希数?处理极其稀疏的数据并需要更多的冲突

数据挖掘 数据挖掘 大数据 聚类 推荐系统 相似
2022-02-28 10:30:44

我正在尝试使用 minhash 来生成集群和相似性,并且我主要使用来自这些资源的想法。

我正在使用的数据包括用户和项目之间的交互。有 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 个哈希键并在用户匹配多个时配对用户。提前致谢。

1个回答

一种选择是将散列函数更改为更有可能发生冲突的函数。例如,Pearson 散列是一个 8 位散列,与更常见的散列函数相比,它的冲突要多得多。