【问题标题】:Jaccard Distance calculation using pdist in scipy在 scipy 中使用 pdist 计算 Jaccard 距离
【发布时间】:2016-02-20 13:42:03
【问题描述】:
import scipy.spatial.distance as dist

Y=[[1,2,3],[2,3,4]]

Q=dist.pdist(Y,'jaccard')

print Q

下面的 sn-p 给出的 jaccard 距离为1,而它应该是0.5。 另一方面,如果Y=[[1,2,3],[4,2,3]] 即如果更改了顺序,则输出为 0.33。但是杰卡德距离与元素的顺序无关。您能在此处建议如何解决此问题吗?

【问题讨论】:

  • docs 不是很清楚,但他们认为排序很重要:他们说 Jaccard 距离是“那些元素 u[i] 和 v[i] 的比例不同意”,我理解这是两个元素的固定 i 。那将与您的结果一致。不管怎样,你检查过他们源代码中的实现吗?
  • jaccard 函数 (docs.scipy.org/doc/scipy/reference/generated/…) 的文档字符串给出了更好的描述。 jaccard 计算 boolean 数组的 Jaccard-Needham 相异度。它对其他数组类型的行为没有定义,所以你不应该传入任意整数的数组。

标签: python numpy scipy


【解决方案1】:

jaccard function 的文档字符串比pdist docstring 中的简洁摘要更好地描述了计算。 jaccard 计算布尔数组的 Jaccard-Needham 相异度。它对其他数组类型的行为没有定义,所以你不应该传入任意整数的数组。

【讨论】:

    【解决方案2】:

    对于遇到此问题的其他人,pdist 似乎按索引比较数组,而不仅仅是存在哪些对象 - 因此 scipy 实现依赖于顺序,但输入数组不被视为布尔数组(在某种意义上[1,2,3][4,5,6] 不会都被视为 [True True True],不像 scipy jaccard 函数)。

    我有一个类似的问题,并在这里查看:
    Why are there discrepanices when generating a distance matrix with scipy pdist(metric = 'jaccard') vs scipy jaccard?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-24
      • 2015-06-25
      • 2015-10-29
      • 2014-09-07
      • 2013-09-22
      • 2018-03-09
      相关资源
      最近更新 更多