文章の類似度を計算する場合などにCOS類似度というのが 使われるらしい。 二次元で考えた場合、ベクトルAとベクトルBの類似度は、 COS類似度=AとBの内積/(norm(A)*norm(B))normは my $norm_1 = 0.0; map { $norm_1 += $_ ** 2 } values %{$vector_1}; $norm_1 = sqrt($norm_1);のように、ベクトルの要素をそれぞれ二乗して積算して、SQRTをとったもの。 二次元の場合は、norm([x,y])=sqrt(x^2+y^2)=距離ですね (このへんはボナメソのペナルティでもおなじみ。L1norm、L2norm) 内積をノルムで割ってるのは、正規化がかかるためのようです。 ベクトルによって長かったり、短かったりするでしょうから。 ベクトルとベクトルの間の角度が、類似度を表現するわけです。 内積は