データフレームからのユークリッド距離を重み付けした距離行列を作成したいと考えています。重みはベクトルで定義されます。ここでは例です:重み付きユークリッド距離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))
私はどこにでも検索した重み付けをサポートするために主張して「クラスタ」パッケージ内R.ザ・「デイジー」関数にこれをパッケージまたは解決策を見つけることはできませんが、重みドン適用されていないようだし、それはただのユークラッドを吐き出すだけだ。距離。
任意のアイデアStack Overflow?
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 私は実際には、誤解されている場合があります。この文書では、重み付けはGower距離でしか動作しないと言われています。それにもかかわらず、私の質問はまだ立っています:重み付きユークリッド距離をサポートするパッケージはありますか? – 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