特徴間のコサイン距離はnumpyの計算::

 コサイン距離は、多くの場合、例えば、算出された類似度を適用する際に使用されます。

  • テキスト類似検索
  • 顔認識検索
  • 類似画像検索

それは理論的根拠を概説します

以下は、コサイン類似度(ウィキペディアからの図)計算値:

コサイン類似度は、ウィキペディアから計算されます

しかし、コサイン類似度、および一般的なユークリッド距離又は距離L1が異なっています。

  • 範囲-1〜1の間のコサイン類似度。1の正確に同じ値、-1は逆逆直交又は無相関はゼロです。(以下、ソース
  • ユークリッド距離は、一般に、正規化後の0と1の間の正の値です。短い距離、より類似しています。

より直感的な類似検索のためのユークリッド距離。使用に際し、コサイン類似度に変換する必要はコサイン距離ユークリッド距離と類似しています。

ウィキ所定の角距離は(ウィキペディアからの図)を以下のように計算されます。

 

 

画像または類似度を計算するテキストので、抽出された特徴が負でない、0から1までの範囲のコサイン類似度は、簡単な方法ので、直接のように定義します:

1-コサイン類似度のコサイン距離=

 

コード分​​析

以下のコードは、異なる入力データに応じて二つのモードに分けます。

  • 入力データの1次元ベクトルは、画像やテキストの単一(シングルモード)との間の類似度を算出します
  • 二次元ベクトル(行列)、複数の画像またはテキスト間の類似性(バッチモード)を計算するための入力データ
1つのインポートNPとしてnumpyの
 2デフcosine_distance(B):
 3であればa.shape =!B.SHAPE:
 4レイズはRuntimeError( "アレイ{}形状が一致してい{}" .format(a.shape、B.SHAPE) ) 5もしa.ndim == 1  6 a_norm = np.linalg.norm()7 b_norm = np.linalg.norm(B)8のelif a.ndim == 2 :9 a_norm = np.linalg.norm( 、軸= 1、keepdims = TRUE)10 b_norm = np.linalg.norm(B、軸= 1、keepdims = TRUE)そうでなければ11 :12レイズはRuntimeError( "配列の次元{}はない右" .format(a.ndim ))13 similiarity = np.dot(BT)/(a_norm * b_norm)14 DIST = 1 - similiarity 15戻りDIST

 

ライン〜。7. 6は、  np.linalg.norm 操作は、ベクトルパラダイムデフォルトのL2ノルムを求めている、ユークリッド距離が必要なベクトルに相当します。

パラメータ軸= 1を設定する10行9、。各正規化された画像処理の個々の特性に対応し、ベクトルが行のデータを処理し、正規化した二次元ベクトルに対する。

13行は、np.dot 操作は、文書の公式な解釈から、2つの動作モードをサポートすることができます。

 numpy.dot、  B、  アウト=なし

  2つの配列の内積。具体的には、

  • 両方の場合  、A  と  Bが  1次元配列され、それは(複素共役なし)ベクトルの内積です。

  • 両方の場合  、A  と  Bは  2次元配列であり、それは行列乗算であるが、使用  matmul 又は   好ましいです。b

一貫性のために、我々は転置操作を使用します。図は、(から次のブログ定義により)、線形代数行列乗算を、乗算を完了するために、行×列でなければなりません。実施例32は、128次元の特徴を計算し、それが32x128 * 128x32ジョブでなければなりません。

  

参考記事

おすすめ

転載: www.cnblogs.com/hansoluo/p/12123518.html