简介
我想通过使用Matlab“pdist2”函数来评估两个“bin counts”数组(与两个直方图相关)之间的相似性:
% Input
bin_counts_a = [689 430 311 135 66 67 99 23 37 19 8 4 3 4 1 3 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1];
bin_counts_b = [569 402 200 166 262 90 50 16 33 12 6 35 49 4 12 8 8 2 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 1];
% Visualize the two "bin counts" vectors as bars:
bar(1:length(bin_counts_a),[bin_counts_a;bin_counts_b])
% Calculation of similarities
cosine_similarity = 1 - pdist2(bin_counts_a,bin_counts_b,'cosine')
jaccard_similarity = 1 - pdist2(bin_counts_a,bin_counts_b,'jaccard')
% Output
cosine_similarity =
0.95473215802008
jaccard_similarity =
0.0769230769230769
问题
如果余弦相似度接近1,这意味着两个向量相似,那么jaccard相似度不也应该接近1吗?
1条答案
按热度按时间w6lpcovy1#
根据documentation,
'jaccard'
度量只考虑“不同的非零坐标的百分比”,而不是它们的差异。例如,假设
bin_counts_a
与您的示例相同,并且然后,
几乎是
1
,因为bin计数非常相似。然而,在这方面,给出
0
,因为bin_counts_b
中的每个条目与bin_counts_a
中的条目(略有)不同。为了评估直方图之间的相似性,
'cosine'
可能是比'jaccard'
更有意义的选项。您可能还想考虑Kullback-Leibler divergence,尽管它在两个分布中不对称,并且不是由pdist2
计算的。