【问题标题】:Similarity score for arrays with high dimensional attributes具有高维属性的数组的相似度得分
【发布时间】:2017-05-20 23:53:01
【问题描述】:

大家好[第一次发帖,请温柔:)]

我正在尝试计算许多数组(数千个)之间的相似度分数,以便创建相似数组的 2D 图(类似于tSNE)。

数组如下: 每个数组都有许多与之关联的唯一整数(每个对象可能有 40-200 个整数):

arr1 = [1513, 2354, 1929483, 323423...]

arr2 = [4546, 847, 993847, 8457...]

...

arrN = [236, 395828, 434535, 4369...]

每个唯一整数的范围约为 1-30,000,000。我想将每个数组与所有其他数组进行比较,以确定它们共有多少个整数。这应该是相似度得分的基础,我想比较会产生一个 N x N 相似度得分矩阵,尽管我很想听听您如何将 N x N 矩阵降低到更低的维度。

感谢您的帮助,我真的不知道从哪里开始!

【问题讨论】:

  • 对数组进行排序还允许对匹配元素进行更便宜的(二进制)搜索;如果数组很大并且匹配元素的数量很少,这可能是值得的。

标签: python multidimensional-array machine-learning cosine-similarity


【解决方案1】:

如果内存不是问题,我会将所有数组转换为集合,然后比较它们的哈希值,例如:

arr1 = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101]
arr2 = [47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149]

arr1_arr2_same = set(arr1) & set(arr2)

print("arr1 vs arr2, same elements: {}\n\tTotal: {}".format(arr1_arr2_same, len(arr1_arr2_same)))

# prints:
# arr1 vs arr2, same elements: set([97, 67, 101, 71, 73, 79, 59, 83, 53, 89, 47, 61])
#    Total: 12

您可以遍历您的数组,收集这些集合并将它们(或它们的总数)存储在所需的矩阵中。不知道你到底想用它们做什么。

【讨论】:

  • 感谢您,这绝对是有帮助的。我想知道如果内存开销是一个问题,你会怎么做?我还计划获取这些相似度分数(即,您列出的示例为 12)并用 tSNE 之类的东西绘制它们以可视化相似度网络。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-14
  • 1970-01-01
  • 1970-01-01
  • 2018-06-11
  • 2015-01-30
  • 2012-01-23
相关资源
最近更新 更多