彼らの目標はすべて同じです:類似したベクトルを見つけること。どの状況でどちらを使用しますか? (実用的な例はありますか?)
ピアソン相関とコサイン類似度は、スケーリングに対して不変です。つまり、すべての要素にゼロ以外の定数を乗算します。ピアソン相関は、すべての要素に定数を追加しても不変です。たとえば、2つのベクトルX1とX2があり、ピアソン相関関数の名前がpearson()
、pearson(X1, X2) == pearson(X1, 2 * X2 + 3)
であるとします。 2つのベクトルが同じように変化することだけが2つのベクトルの絶対的な類似点であることを気にしないことが多いため、これは非常に重要なプロパティです。
ピアソン相関係数とコサイン類似度の違いは、それらの公式から見ることができます:
ピアソン相関係数が定数の追加に対して不変である理由は、構造によって平均が差し引かれるからです。また、X
とY
が0
なので、ピアソン相関係数はコサイン類似度の卑劣なバージョンと考えることができます。
実際に使用するために、2つのアセットx
とy
の戻り値を考えてみましょう。
In [275]: pylab.show()
In [276]: x = np.array([0.1, 0.2, 0.1, -0.1, 0.5])
In [277]: y = x + 0.1
これらの資産の収益は、ピアソン相関係数(1)によって測定される変動とまったく同じですが、余弦類似性(0.971)によって計測される正確には類似していません。
In [281]: np.corrcoef([x, y])
Out[281]:
array([[ 1., 1.], # The off diagonal are correlations
[ 1., 1.]]) # between x and y
In [282]: from sklearn.metrics.pairwise import cosine_similarity
In [283]: cosine_similarity(x, z)
Out[283]: array([[ 0.97128586]])
@dsimchaの回答に加えて、元のデータのサブセットのコサイン類似度は、元のデータのコサイン類似度と同じですが、ピアソン相関には当てはまりません。これは、データのサブセットをクラスタリングするときに役立ちます。それらは(トポロジー的に)元のクラスタリングと同一であるため、視覚化および解釈がより簡単になります。