我们使用 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));
将是一个可以接受的修复?