与手动相比,在 R 中计算 cosine.similarity 会给出不同的结果?
Computing cosine.similarity in R gives different results compared to manual?
这是我的向量:
lin_acc_mag_mean vel_ang_unc_mag_mean
<dbl> <dbl>
1 0.688 0.317
lin_acc_mag_mean vel_ang_unc_mag_mean
<dbl> <dbl>
1 2.94 0.324
或为简单起见:
a <- c(.688,.317)
b <- c(2.94, .324)
我想计算 tcR::cosine.similarity
:
cosine.similarity(a,b, .do.norm = T) gives me 1.388816
如果我自己按照Wikipedia做的话:
sum(c(.688,.317) * c(2.94, .324)) / (sqrt(sum(c(.688,.317) ^ 2)) * sqrt(sum(c(2.94, .324) ^ 2)))
我得到 0.948604
那么这里有什么不同?
请指教。我想这是正常化,但很乐意为您提供帮助。
在 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
计算 returns 总和为 1 的向量,但似乎没有被归一化。
我建议改用 lsa
包中的 cosine
函数。这一个产生正确的值。它还允许计算按列组织的整个向量矩阵的余弦相似度。例如,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
这是我的向量:
lin_acc_mag_mean vel_ang_unc_mag_mean
<dbl> <dbl>
1 0.688 0.317
lin_acc_mag_mean vel_ang_unc_mag_mean
<dbl> <dbl>
1 2.94 0.324
或为简单起见:
a <- c(.688,.317)
b <- c(2.94, .324)
我想计算 tcR::cosine.similarity
:
cosine.similarity(a,b, .do.norm = T) gives me 1.388816
如果我自己按照Wikipedia做的话:
sum(c(.688,.317) * c(2.94, .324)) / (sqrt(sum(c(.688,.317) ^ 2)) * sqrt(sum(c(2.94, .324) ^ 2)))
我得到 0.948604
那么这里有什么不同?
请指教。我想这是正常化,但很乐意为您提供帮助。
在 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
计算 returns 总和为 1 的向量,但似乎没有被归一化。
我建议改用 lsa
包中的 cosine
函数。这一个产生正确的值。它还允许计算按列组织的整个向量矩阵的余弦相似度。例如,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