目次(まとめ)
◾️ 数値配列の類似性を測るための代表的な距離指標
◾️ Rを使って、さまざまな距離を計算する
◾️ 参考文献
こんにちは、みっちゃんです。
今回の記事では、2つの数値配列が与えられた時に、その配列がどれぐらい似ているのかを数値的に測る「距離」の指標について紹介します。
数値配列の類似性を測るための代表的な距離指標
いま、2つの \(p\) 次元の数値配列 \({\bf a} = (a_1, a_2, a_3, ..., a_p)^{\rm T}\)、\({\bf b} = (b_1, b_2, b_3, …, b_p)^{\rm T}\) があるとします。
この2つの数値配列の類似度を測るために「距離」の指標が定義されます。
距離の値が小さければ、つまり、距離が近ければ、2つの数値配列は似ており、逆に、距離の値が大きければ、つまり、距離が遠ければ、2つの数値配列は似ていないということになります。
代表的な「距離」の指標は、以下の4つです。
ユークリッド距離(通常これが使われる)
$$d({\bf a}, {\bf b}) = \sqrt{\sum_{i = 1}^p (a_i - b_i)^2}$$
基準化ユークリッド距離
$$d_s({\bf a}, {\bf b}) = \sqrt{\sum_{i = 1}^p (\frac{a_i - b_i}{s_i})^2}$$
ここで、\(s_i\) は標準偏差です。
\(L_1\) 距離(マンハッタン距離)
$$d_l({\bf a}, {\bf b}) = \sum_{i = 1}^p |a_i - b_i|$$
ミンコフスキー距離
$$d_m({\bf a}, {\bf b}) = \{\sum_{i = 1}^p |a_i - b_i|^m\}^{\frac{1}{m}}$$
Rを使って、さまざまな距離を計算する
ここでは、正規分布にしたがう乱数を "10" 個ずつ生成して、数値配列 "a" と "b" を定義します。
> a <- rnorm(10)
[1] 0.69919252 -1.13583347 -1.72555196 -0.23745895 -0.24390934 -0.54681789
[7] 3.06841032 1.29307403 0.02368348 0.70438493
> b <- rnorm(10)
[1] -0.90249537 0.95235256 0.84197735 0.44120153 -0.26007686 0.55702109
[7] 0.38744398 2.27753317 -0.03427835 -1.55940981
この2つの数値配列の距離を求めるためには、まず、2つの配列を組み合わせる必要があります。
> rbind(a, b)
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
a 0.6991925 -1.1358335 -1.7255520 -0.2374589 -0.2439093 -0.5468179 3.068410
b -0.9024954 0.9523526 0.8419774 0.4412015 -0.2600769 0.5570211 0.387444
[,8] [,9] [,10]
a 1.293074 0.02368348 0.7043849
b 2.277533 -0.03427835 -1.5594098
このデータを以下のように "dist" 関数に入れることで、距離を計算することができます。
> dist(rbind(a, b), method = "euclidian")
a
b 5.336881
ここでは、距離の指標として、ユークリッド距離(euclidian)を指定していますが、マンハッタン距離(manhattan)やミンコフスキー距離(minkowski)を指定して、距離を算出することができます。
参考文献
小西貞則「多変量解析入門 −線形から非線形へ−」岩波書店