3

以下は、ベクトル間のユークリッド距離を計算するためのコードと、変換されたデータ セット (ベクトル) のスニペットです。

import itertools
import numpy as np

vect=[[2, 1, 1, 1, 1, 3, 4, 2, 5, 1],
 [1, 5, 2, 1, 1, 1, 1, 1, 1, 2],
 [2, 1, 1, 1, 2, 1, 1, 1, 1, 1]]

for u1, u2 in itertools.combinations(vect, 2):
    x = np.array(u1)
    y = np.array(u2)
    space = np.linalg.norm(y - x)
    print space

ベクトル間のユークリッド距離は次のとおりです。

7.0
5.56776436283
4.472135955

私の目標は、ベクトル間の類似性を計算し、比較ごとに類似性スコアを出力することです。典型的な類似性スコアは 0 から 1 の間で、0 は類似していない、1 は完全に類似している。ここでの質問は、ユークリッド距離を類似度スコアに変換するにはどうすればよいですか? 誰かがこの式を提案しました: 1/1+d(P1, P2) つまり、ユークリッド距離の逆数 = 類似度スコア。何か提案はありますか? ありがとう

4

1 に答える 1

2

そこにはたくさんの類似性尺度があります。user2357112 が言うように、最適なものはアプリケーションによって異なります。ここにリストされているカーネルのいくつかを確認することをお勧めします。

http://crsouza.blogspot.co.uk/2010/03/kernel-functions-for-machine-learning.html

特にベクトルがヒストグラムの場合、自分のアプリケーションではカイ 2 乗カーネルが適切なデフォルトの選択肢であることがわかりました。

互いに類似させたいデータのサブセットが既にわかっている場合は、いくつかの異なるカーネルを試して、これらのサンプルに対して結果の類似度行列をプロットすることをお勧めします (100 個のテスト サンプルがある場合は、 matplotlib.pyplot の imshow メソッドを使用して、単純にヒート マップとしてプロットできる 100x100 の類似性マトリックス)。

于 2013-08-09T09:44:15.093 に答える