我想创建一个距离数据框的加权欧氏距离的距离矩阵。权重将在向量中定义。这里有一个例子:R中的加权欧几里德距离
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))
我搜索无处不在,声称支持加权不能“集群”包内发现河的“菊花”功能的软件包或解决方案,这一点,但权重唐似乎没有被应用,它只是吐出常规的欧几里得。距离。
任何想法堆栈溢出?
newdf <- sweep(df, 2, weighting, function(x,y) x * sqrt(y))
as.matrix(daisy(newdf, metric="euclidean"))
但是为了以防万一,你想有更多的控制和了解:
https://stat.ethz.ch/R-manual/R-devel/library/cluster/html/daisy.html 我可能搞错了,其实。该文件似乎表示,权重只适用于高尔距离。尽管如此,我的问题仍然存在:是否有支持加权欧几里德距离的包? – Gary866
我认为你需要显示“加权距离”的公式。 –
http://images.slideplayer.com/16/5203007/slides/slide_49.jpg 所以在这个例子中(我已经纠正),如果我们想要第1行和第2行之间的距离,它会计算为: 距离= 1 *(1-2)^ 2 + 2 *(5-4)^ 2 + 3 *(5-4)^ 2 距离计算应用于大数据集,变量和权重在每次运行中都会有所不同。所以它不是简单的(或者至少超出我的技能水平)写我自己的功能,因此我在寻找一个软件包。 – Gary866