相関係数とコサイン類似度


相関係数とコサイン類似度

相関係数とコサイン類似度は数学的にはほぼ等価であり、どちらもベクトルのノルムで正規化した内積です。

まずベクトル$a, b$のコサイン類似度は
$$
\cos \theta = \frac{a \cdot b}{|a| |b|} \tag{1}
$$です。これをベクトルの要素で書き直すと
$$
\cos \theta = \frac{\sum_{i=1}^n a_i b_i}{\sqrt{\sum_{i=1}^n a_i^2} \sqrt{\sum_{i=1}^n b_i^2}}
$$となります。

一方で確率変数$x,y$の相関係数$r$は
$$
r = \frac{\mathrm{Cov}(x, y)}{\sqrt{\mathrm{Var}(x)} \sqrt{\mathrm{Var}(y)}}
$$です。
$$
\begin{align}
\mathrm{Cov}(x, y) &= \sum_{i=1}^n (x_i - \overline{x})(y_i - \overline{y}) \\
\mathrm{Var}(x) &= \sum_{i=1}^n (x_i - \overline{x})^2
\end{align}
$$ですから、中心化$a_i = x_i - \overline{x}, b_i= y_i - \overline{y}$を行なったデータベクトルについての相関係数を計算すると$(1)$に一致します。

ちなみに中心化を行わずにコサイン類似度を計算すると、
$$
\begin{align}
\cos \theta
&= \frac{x \cdot y}{|x| |y|} \\
&= \frac{(a + \overline{x})\cdot (b + \overline{y})}{|a + \overline{x}||b + \overline{y}|} \\
&= \frac{a \cdot b + \overline{x} \cdot \overline{y} + (others)}{\sqrt{|a|^2 |b|^2 + |\overline{x}|^2 |\overline{y}|^2 + (others)}}
\end{align}
$$となり、平均の情報がコサイン類似度の情報に混ざってしまいます。othersは1次の項のため、たとえば$|a|$に比べて$|x|$が非常に大きくなるような文脈では無視できます。

これがどういう意味か解釈すると、$|a|, |b|$に比べて$|\overline{x}|, |\overline{y}|$が非常に大きくなる文脈では、$\overline{x} \cdot \overline{y}$の値によってコサイン類似度の値はほぼ決まってしまうということです。大抵の場合これは「どのデータどうしのコサイン類似度を測っても$0.8$など非常に大きい値をとる」とか、逆にどのデータどうしを見ても$0$に近いとか、好ましくないバイアスがコサイン類似度に含まれることになるので、なるべく中心化を行なってから計算すべきです。