ピアソンの積率相関係数と、コサイン類似度

cosine類似度から、ピアソンの積率相関係数を出すことができて、 それによって積率相関係数は-1~1を取る事が分かるよ。という話を教えてもらった。 教えてもらった知識をまとめておきたいので記載。

データの1列分のことを$n$次元数ベクトル空間の元だと考えてみましょう。

このベクトル空間の任意の2元$x, y$の内積を $$(x, y) = \sum^n_i(x_i y_i)$$ で定めます。

cosine類似度$\cos \theta$とは、このようなベクトル空間で以下のように定義されている値です。

$$\cos \theta = \frac{(x, y)}{| x | | y |}$$

cosine類似度を展開すると以下のようになります。

$$\cos \theta = \frac{\sum^n_i(x_i y_i)}{ \sqrt{ \sum^n_i x_i^2 } \sqrt{ \sum^n_i y_i^2 } }$$

といって、ここで$\cos \theta$という式を呼んじゃってるわけなんですけれど、 これが普通の意味での幾何ベクトルとして2つのベクトル$x, y$のなす角$\theta$に コサインを適用した値に一致することを証明してみましょう。 (余弦定理を知っている人は、途中に余弦定理の証明が含まれているのを見つけてみてください。何処から何処まででしょうか?)

(proof)

与えられた2本のベクトル$x, y$の間の鋭角を$\theta$とする。 ベクトル$h$を、$y$から$x$へ垂直になるように落としたベクトルとすると、この長さは$| h | = | y | \sin \theta$ ベクトル$g$を、$x$上で$h$が指す点までの$0$からのベクトルとすると、この長さは$| g | = | y | \cos \theta$

$x-g$, $h$, $x-y$の3つのベクトルの作る三角形を考えると、角$gh$が直角なので、三平方の定理から $$(| x | - | g |)^2 + | h |^2 = | x - y |^2$$ これを計算すると

$(\sqrt{\sum x_i^2} - \sqrt{\sum (y_i \cos \theta)^2})^2 + \sqrt{\sum (y_i \sin \theta)^2}^2 = \sqrt{ \sum (x_i - y_i)^2 }^2$ (展開した)

$\sqrt{\sum x_i^2}^2 - 2 \sqrt{\sum x_i^2}\sqrt{\sum (y_i^2 \cos^2 \theta)} + \sqrt{\sum (y_i^2 \cos^2 \theta)}^2 + \sqrt{\sum (y_i^2 \sin^2 \theta)}^2 = \sqrt{ \sum (x_i^2 + y_i^2 - 2 x_i y_i) }^2$

$\sum x_i^2 - 2 \sqrt{\sum x_i^2}\sqrt{\sum (y_i^2 \cos^2 \theta)} + \sum (y_i^2 \cos^2 \theta) + \sum (y_i^2 \sin^2 \theta) = \sum (x_i^2 + y_i^2 - 2 x_i y_i)$

$\sum x_i^2 - 2 \cos \theta \sqrt{\sum x_i^2}\sqrt{\sum y_i^2} + (\sum y_i^2) \cos^2 \theta + (\sum y_i^2) \sin^2 \theta = \sum x_i^2 + \sum y_i^2 - 2 \sum x_i y_i$ (項を分解・整理)

$\sum x_i^2 - 2 \cos \theta \sqrt{\sum x_i^2}\sqrt{\sum y_i^2} + (\sum y_i^2)(\cos^2 \theta + \sin^2 \theta) = \sum x_i^2 + \sum y_i^2 - 2 \sum x_i y_i$ (分配法則)

$\sum x_i^2 - 2 \cos \theta \sqrt{\sum x_i^2}\sqrt{\sum y_i^2} + \sum y_i^2 = \sum x_i^2 + \sum y_i^2 - 2 \sum x_i y_i$ ($cos^2 \theta + sin^2 \theta = 1$ より)

$- 2 \cos \theta \sqrt{\sum x_i^2}\sqrt{\sum y_i^2} = - 2 \sum x_i y_i$ (両辺から $\sum x_i , \sum y_i^2$を引いた)

$\cos \theta = \frac{ \sum x_i y_i }{ \sqrt{\sum x_i^2}\sqrt{\sum y_i^2} }$ □

積率相関係数との関係

さてこういうcosine類似度が、積率相関係数と関係があるという話でした。

ある数ベクトル$v$の偏差ベクトル$\hat{v}$とは、そのベクトルの平均値$\bar{v}$で、ベクトルの各要素を引いたベクトル$\hat{v}_i = v_i - \bar{v}$のことです。 実は2本のベクトル$x, y$(つまり今回の場合は2列のデータ)の積率相関係数は、結局そのベクトルたちの偏差ベクトル同士のcosine類似度のことを言っているのです。

(proof)

$cos \theta = \frac{ \sum ( \hat{x}_i \hat{y}_i ) }{ \sqrt{ \sum \hat{x}_i^2 }\sqrt{ \sum \hat{y}_i^2 } } = \frac{ \sum (x_i - \bar{x})(y_i - \bar{y}) }{ \sqrt{ \sum ( x_i - \bar{x} )^2 }\sqrt{ \sum ( y_i - \bar{y} )^2 } } = r$ □

ね?

そしてcosine類似度はコサインの値域を考えると-1から1であるので積率相関係数も-1から1までを取るというわけですね。

このお話のいいところは積率相関係数を頭に焼き付けるのに便利だってあたりじゃないかと実は感じてます。 コサイン類似度はすごく覚えやすい式の形をしています。そこに偏差ベクトルというアイディアだけ覚えておけば、積率相関係数もすぐ導出できる。

……というメモ。