Мы используем класс 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));
было бы приемлемым решением?
(1-sqrt(sum((vector2-vector1)^2))
- person Thomas Jungblut   schedule 26.10.2012similarity.similarity
. Эта строка находится в EuclideanDistanceSimilarity, который является одним из VectorSimilarityMeasures, который можно подключить через конфигурацию задания Hadoop. - person Tom Martin   schedule 26.10.2012