我想测量两个双精度值向量之间的相似性。
KL.divergence
计算Kullback-Leibler散度。
library( 'FNN' )
> KL.divergence
function (X, Y, k = 10, algorithm = c("kd_tree", "cover_tree",
"brute"))
{
algorithm <- match.arg(algorithm)
if (!is.matrix(X))
X <- matrix(X)
if (!is.matrix(Y))
Y <- matrix(Y)
n <- nrow(X)
p <- ncol(X)
m <- nrow(Y)
log(m/n) + p * (colMeans(log(knnx.dist(Y, X, k = k, algorithm))) -
colMeans(log(knn.dist(X, k = k, algorithm))))
}
<bytecode: 0x560d44f70aa8>
<environment: namespace:FNN>
这令人惊讶-我期望输出一个数字。
我尝试研究论文,解释了knn
如何用于有效计算KL散度,但不知所措。
例如,如何计算两个向量的KL得分
a = c(1.1, 1.1, 2.2, 3.3)
b = c(1.2, 2.1, 2.1, 3.5)