目次(まとめ)

◾️ ピアソンの積率相関係数は、数値配列の分散、共分散を使って計算される

◾️ コサイン類似度は、数値配列の内積をとって計算される

◾️ Rを使って、ピアソンの積率相関係数とコサイン類似度を算出する


こんにちは、みっちゃんです。

今回の記事では、2つの数値配列の類似性を評価するための代表的な指標である、「ピアソンの積率相関係数」と「コサイン類似度」について、定義からRを使った算出法まで紹介します。

ピアソンの積率相関係数は、数値配列の分散、共分散を使って計算される

以前の記事で、確率変数 \(X\) と \(Y\) の相関係数(correlation coefficient)は、以下のように計算することができるということを紹介しました。
$${\rm Corr}(X, Y) = \frac{{\rm Cov}(X, Y)}{\sqrt{{\rm Var}(X){\rm Var}(Y)}}$$
ここで、\({\rm Cov}(X, Y)\) は確率変数 \(X\) と \(Y\) の共分散を示しています。

確率変数 \(X\) の実現値からなる数値配列、確率変数 \(Y\) の実現値からなる数値配列について、分散や共分散を計算することで、相関係数を算出します。

この相関係数は「ピアソンの積率相関係数」とも呼ばれます。

この係数は、19世紀後半から20世紀前半に活躍したイギリスの数理統計学者であるカール・ピアソン(Karl Pearson)さんによる業績の一つとして知られています。

コサイン類似度は、数値配列の内積をとって計算される

ここでは、上で使用した確率変数 \(X\) の実現値からなる数値配列、確率変数 \(Y\) の実現値からなる数値配列について、それぞれベクトルの要素とみなして考えます。
$${\bf x} = (x_1, x_2, ..., x_n)\\{\bf y} = (y_1, y_2, ..., y_n)$$
この2つのベクトルに対して、コサイン類似度は以下のように計算することができます。
$${\rm Cos}({\bf x}, {\bf y}) = \frac{\sum_{k = 1}^n x_k y_k}{\sqrt{\sum_{k = 1}^n x_k^2}\sqrt{\sum_{k = 1}^n y_k^2}}$$

Rを使って、ピアソンの積率相関係数とコサイン類似度を算出する

ここでは、Macのターミナル上でRを開き、ランダムな数値配列である "a" と "b" を設定して使用します。

$ R -q
> a <- rnorm(10)
> b <- rnorm(10)

"rnorm" 関数により、正規分布にしたがう乱数を発生させることができます。

ピアソンの積率相関係数は、以下のように計算することができます。

#== Pearson similarity ==#
> (pear <- cor(a, b, method = "pearson"))

"a" と "b" が乱数によって定義されているので、人によって出力が変わる可能性がありますが、私の場合は、出力結果が "0.1247597" となりました。

一方、コサイン類似度は、以下のように計算することができます。

コサイン類似度の算出には、"lsa" パッケージを使うと便利です。

#== Cosine similarity ==#
> install.packages("lsa") #パッケージをインストールしていない場合に実行
> library(lsa)
> (cos <- cosine(a, b))

私の場合は、出力結果が "0.1250769" となりました。

このように、「ピアソンの積率相関係数」と「コサイン類似度」は、値が変わってくることがわかります。