具有高维属性的数组的相似度得分

时间:2017-05-20 15:26:09

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

嘿大家[第一篇文章,请温柔请:]]

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

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

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

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

...

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

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

感谢您的帮助,我不确定从哪里开始!

1 个答案:

答案 0 :(得分:2)

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

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

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