EuclideanDistanceSimilarityクラスを使用して、Hadoopを使用して多数のアイテムの類似性を計算しています。
残念ながら、一部のアイテムは、アイテムと非常に類似しているにもかかわらず、ゼロまたは非常に少数の類似アイテムを取得しています。
EuclideanDistanceSimilarityクラスのこの行まで追跡したと思います。
double euclideanDistance = Math.sqrt(normA - 2 * dots + normB);
sqrtに渡される値が負の場合があり、その場合はNaNが返されます。おそらくどこかにMath.absがあるはずだと思いますが、私の数学は、ユークリッド計算がどのように再配置されたかを理解するのに十分なほど強力ではないため、効果がどうなるかわかりません。
誰かが数学をもっとよく説明して、
double euclideanDistance = Math.sqrt(Math.abs(normA - 2 * dots + normB));
許容できる修正でしょうか?