私はMahoutを初めて使用し、最近、以前の機械学習コードの多くをこのフレームワークに変換しています。多くの場所で、クラスタリングや分類などのためにベクトル間の余弦類似性を使用しています。しかし、Mahoutの距離法を調査すると、非常に驚きました。次のコードスニペットでは、ディメンションとフロートの値は、私のプログラムの1つの実際の出力から取得されています(ここでは重要ではありません)。
import org.apache.mahout.math.RandomAccessSparseVector;
import org.apache.mahout.common.distance.CosineDistanceMeasure;
public static void main(String[] args) {
RandomAccessSparseVector u = new RandomAccessSparseVector(373);
RandomAccessSparseVector v = new RandomAccessSparseVector(373);
u.set(24, 0.4526985183337534);
u.set(55, 0.5333219834564495);
u.set(54, 0.5333219834564495);
u.set(53, 0.4756042214095471);
v.set(57, 0.6653016370845252);
v.set(56, 0.6653016370845252);
v.set(11, 0.3387439495921685);
CosineDistanceMeasure cosineDistanceMeasure = new CosineDistanceMeasure();
System.out.println(cosineDistanceMeasure.distance(u, v));
}
出力は1.0
です。そうではない0.0
ですか?
これをの出力と組み合わせると、cosineDistanceMeasure.distance(u, u)
私が探しているのはであることがわかり1 - cosineDistanceMeasure.distance(u, v)
ます。しかし、この逆転は私には意味がありません。なぜそれがこのように実装されたのか、何か考えはありますか?それとも私は非常に明白な何かを見逃していますか?