コサイン類似度

二つのベクトル aundefined=(a1,a2,,an)\overrightarrow{a}=(a_1,a_2,\cdots,a_n)bundefined=(b1,b2,,bn)\overrightarrow{b}=(b_1,b_2,\cdots,b_n) に対して

a1b1++anbna12++an2b12++bn2\dfrac{a_1b_1+\cdots +a_nb_n}{\sqrt{a_1^2+\cdots +a_n^2}\sqrt{b_1^2+\cdots +b_n^2}}

をコサイン類似度(またはコサイン距離)と言う。

コサイン類似度の意味

2次元ベクトルの場合,コサイン類似度 a1b1+a2b2a12+a22b12+b22\dfrac{a_1b_1+a_2b_2}{\sqrt{a_1^2+a_2^2}\sqrt{b_1^2+b_2^2}} は平面ベクトル aundefined\overrightarrow{a}bundefined\overrightarrow{b} のなす角のコサインです。→二直線のなす角を求める2通りの方法と比較

同様に3次元ベクトルの場合にも「コサイン類似度=ベクトルのなす角のコサイン」となります。

上の考察から予想できるように,コサイン類似度は 2本のベクトルがどれくらい同じ向きを向いているのかを表す指標と言えます。

コサイン類似度の範囲

コサイン類似度は 1-1 以上 11 以下の値を取ります。

これは,シュワルツの不等式(→シュワルツの不等式とそのエレガントな証明):

(a12++an2)(b12++bn2)(a1b1++anbn)2(a_1^2+\cdots +a_n^2)(b_1^2+\cdots +b_n^2)\\ \geq (a_1b_1+\cdots +a_nb_n)^2

から分かります。

コサイン類似度が 11 に近い     \iff 2本のベクトルは同じ向きに近い

コサイン類似度が 1-1 に近い     \iff 2本のベクトルは逆向きに近い

となります。

ちなみに,コサイン類似度をコサイン距離と呼ぶこともありますが,マイナスの値を取ることもあるので,距離の公理は満たしません。

コサイン距離とクラスタリング

図の4点に対してクラスタリング(似たものどうしに分けること)をしてみましょう。

単純な近さに注目すると {A,B}\{A,B\}{C,D}\{C,D\} に分類したくなります。ですが,原点からの向きの近さ(コサイン類似度)に注目すると {A,D}\{A,D\}{B,C}\{B,C\} という分類になります。

コサイン距離とクラスタリング

どちらのクラスタリングが適切なのかは,問題設定によって変わります。

例えば各点が「ポジティブな単語とネガティブな単語が混ざった文書」を表すとしましょう。文書のサイズで分類すると {A,B}\{A,B\}{C,D}\{C,D\} になりますし,文書のポジティブ度合いで分類すると {A,D}\{A,D\}{B,C}\{B,C\} が適切でしょう。