В пакете tcR
функция cosine.similarity
содержит следующее:
function (.alpha, .beta, .do.norm = NA, .laplace = 0)
{
.alpha <- check.distribution(.alpha, .do.norm, .laplace)
.beta <- check.distribution(.beta, .do.norm, .laplace)
sum(.alpha * .beta)/(sum(.alpha^2) * sum(.beta^2))
}
Промежуточное вычисление check.distribution
возвращает вектор, сумма которого равна 1, но не представляется нормализованным.
Я бы рекомендовал вместо этого использовать функцию cosine
в пакете lsa
.Этот производит правильное значение.Это также позволяет вычислять косинусное сходство для всей матрицы векторов, организованных в столбцы.Например, cosine(cbind(a,b,b,a))
дает следующее:
a b b a
a 1.000000 0.948604 0.948604 1.000000
b 0.948604 1.000000 1.000000 0.948604
b 0.948604 1.000000 1.000000 0.948604
a 1.000000 0.948604 0.948604 1.000000