【问题标题】:What is dist() actually computing?dist() 实际计算的是什么?
【发布时间】:2017-02-15 16:10:49
【问题描述】:

我有一个数据框,tmp:

  class          x          y
1   A -2.8959969 -0.3192259
2   B -0.2401775  0.5801373

我计算 dist(tmp, method="euclidean", diag=TRUE, upper=FALSE, p=2) 产生:

         1        2
1 0.000000         
2 3.434144 0.000000

我根本无法弄清楚这是欧几里得距离。如果我计算我认为欧几里得距离应该是什么,它应该是:

((A_{x} - B_{x})^2 + (A_{y} - B_{y})^2 )^0.5 = 
((-2.8959969 + 0.2401775)^2 + (-0.3192259 - 0.5801373)^2)^0.5 = 
2.803967

这与 dist() 返回的不同。

根据它说的文档

可用的距离度量是(针对两个向量 x 和 y 编写的):

‘euclidean’:两个向量之间的通常距离(2 norm aka L_2), sqrt(sum((x_i - y_i)^2)).

我哪里错了?

【问题讨论】:

  • 试试dist(tmp[-1])
  • dist(tmp[-1]) 摆脱了我的班级专栏并开始工作。在我上面的例子中,R 是如何处理 class 的字符的?
  • 作为因子值,as.numeric(tmp$class)
  • 这仍然让我觉得有点神秘。如果AB 被视为因子值,那么它们将是整数,但是如果您查看输出并向后工作,您似乎需要(A-B)^2 = 3.93,这与A,B 不一致被转换为整数值。无论发生什么,都不是这样。
  • 是的,同意 A,B != 1,2,正如您对因子值所期望的那样。

标签: r euclidean-distance


【解决方案1】:

tmp[-1]

只做 tmp 似乎表现得很奇怪。这是应该报告为错误的东西吗???

【讨论】:

    猜你喜欢
    • 2019-06-17
    • 1970-01-01
    • 2018-11-29
    • 2013-07-06
    • 1970-01-01
    • 1970-01-01
    • 2017-11-05
    • 2014-11-24
    • 1970-01-01
    相关资源
    最近更新 更多