機械学習の勉強をしているときに、「コサイン距離」という概念が出てきました。 この距離は、ベクトル同士の近さをコサイン()を用いて測るものです。 レコメンドの一種である協調フィルタリングに、よく使われているみたいです。
数学をやってた身としては、次のことが気になります。
距離って書いてるのだから、距離でしょと思うかもしれませんが、ここでの距離は数学での距離という概念を指します。
詳細に入る前に、上記の疑問の答えだけ書いておきます。
コサイン距離の定義
次元ユークリッド空間 上に、コサイン距離を定義します。
まずは、 に対して、コサイン類似度 を次で定めます:
コサインは三角関数の を意味しており、ベクトル の成す角を とおいたとき、 が成り立ちます。 この類似度を用いて、コサイン距離を定めます。
距離の定義
次に、数学用語の距離の定義を述べます。
ここで、距離空間の例を2つ挙げます。
例1.(マンハッタン距離) に対して、関数 を次のように定める:
例2.(ユークリッド距離) に対して、関数 を次のように定める:
ここで距離と言っているものは、数学用語の距離になっています。
コサイン距離は距離でない
最後に、コサイン距離が距離出ないことを示したいと思います。 4つの条件の内、2と4の条件に反例があります。
2の反例. があります。
となっていますが、 です。 コサイン距離は、 の角度だけ見ているので、長さには興味がありません。 そのため、2つのベクトルの向いている方向が全く同じならば、長さが異なっていても距離は となってしまいます。
4の反例. があります。
となるため、4の条件が成り立ちません。
従って、コサイン距離は距離とならないことがわかりました。 ちなみに、1と3の条件は成立します。 難しくないので、お暇な方は考えて見てください。