目次(まとめ)

◾️ 数値配列の類似性を測るための代表的な距離指標

◾️ 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)を指定して、距離を算出することができます。

参考文献

小西貞則「多変量解析入門 −線形から非線形へ−」岩波書店