【发布时间】:2017-01-07 06:42:08
【问题描述】:
我想创建一个距离矩阵,其中包含与数据框的加权欧几里德距离。权重将在向量中定义。这是一个例子:
library("cluster")
a <- c(1,2,3,4,5)
b <- c(5,4,3,2,1)
c <- c(5,4,1,2,3)
df <- data.frame(a,b,c)
weighting <- c(1, 2, 3)
dm <- as.matrix(daisy(df, metric = "euclidean", weights = weighting))
我到处搜索,在 R 中找不到包或解决方案。'cluster'包中的'daisy'函数声称支持加权,但似乎没有应用权重,它只是吐出常规的euclid。距离。
任何想法堆栈溢出?
【问题讨论】:
-
stat.ethz.ch/R-manual/R-devel/library/cluster/html/daisy.html 实际上我可能弄错了。该文件似乎说加权仅适用于高尔距离。尽管如此,我的问题仍然存在:是否有支持加权欧几里得距离的包?
-
我认为您需要显示“加权距离”的公式。
-
images.slideplayer.com/16/5203007/slides/slide_49.jpg 因此,在示例中(我已更正)如果我们想要第 1 行和第 2 行之间的距离,它将计算为:距离 = 1*(1-2)^2 + 2*(5-4)^2 + 3*(5-4)^2 距离计算将应用于大型数据集,其中变量和权重的数量在每次运行时都会有所不同。因此,仅仅编写自己的函数并不是那么简单(或至少高于我的技能水平),因此我正在寻找一个包。
-
好像别人自己写的函数。您可能可以尝试重新创建。
-
您可以通过权重的平方根来缩放向量(将每个维度乘以其自己的比例因子,而不是常见的向量运算),然后继续使用欧几里得距离。不过,不知道如何在 R 中做到这一点。
标签: r cluster-analysis euclidean-distance r-daisy