gpt4 book ai didi

Javascript Clusterfck 指标

转载 作者:行者123 更新时间:2023-11-30 13:17:06 29 4
gpt4 key购买 nike

因此,我正在将旧的数据可视化转换为新平台,但我对他们的社区排序功能有点困惑。在原始代码中,作者似乎使用了带有余弦相似度计算器的凝聚聚类。我认为在 Javascript 中解决这个问题的最佳方法是使用 clusterfck 制作一棵树,使用我的自定义余弦相似度函数作为度量。对于我传递的每组数据,树几乎都能正确排序。 (但由于项目规范,“几乎”还不够好)。我检查了我的算法,一切看起来都正确,但是当我使用余弦相似度和欧氏距离比较我的结果时,我得到了相同的排序结果。

这可能是什么原因造成的?我想我可能传递了一些错误的东西,而 clusterfck 默认传递了 euclidean。下面是我的代码块。有人可以验证吗? (另外,有没有更简单的方法来计算余弦相似度?我不认为 JS 有内置的点积)。

clusters = clusterfck.hcluster(relationArray, clusterfck.cosSim2, clusterfck.SINGLE_LINKAGE);
postOrder(clusters);
function postOrder(t) {
i++;
if (t == null) {
return;
} else {
postOrder(t.left);
postOrder(t.right);
if (t.left == null && t.right == null) {
communityArr.push(t.canonical[0]);
} else {
return;
}
}
}

function cosSim2(arr1, arr2) {
var d1 = 0,
d2 = 0,
cos = 0;
for(var i = 0; i < arr1.length; i++) {
d1 += Math.pow(arr1[i], 2);
}

for(var j = 0; j < arr2.length; j++) {
d2 += Math.pow(arr2[j], 2);
}

d1 = Math.sqrt(d1);
d2 = Math.sqrt(d2);

for(var j = 0; j < arr2.length; j++) {
if (arr1[j] == null) {
cos += 0;
} else {
cos += arr1[j] * arr2[j];
}
}
var cosSimilarity = cos / (d1 * d2);
return cosSimilarity;
}

最佳答案

我想这个回复对你来说太晚了。但如果其他人偶然发现了这一点:

问题是您使用参数 clusterfck.cosSim2 作为距离度量来调用 clusterfck.hcluster。但由于您的实际距离函数只是 cosSim2,您可以使用未定义的距离函数有效地调用 clusterfck.hcluster,并且 clusterfck 求助于默认的距离函数,即“euclidean”。 ..

另请注意,您的函数确实测量向量之间的相似性,而不是它们的距离。即:余弦相似度越大,向量越相似(即它们之间的夹 Angular 越小)。

但是 clusterfck.hcluster 需要一个真正的距离度量。也就是说,相反的情况应该是正确的:距离度量的值越大,向量越远(即向量越不相似)。

用您的函数调用 clusterfck.hcluster 会产生这样的效果,最不相似 的项目聚集在一起。

您可以轻松地从余弦相似度函数导出距离函数,如下所示:

function cosDist(arr1, arr2) {
return 1 - cosSim2(arr1, arr2);
}

这个新函数 cosDist 的值介于 0 到 2 之间,相同的向量将具有 0 的距离(如预期的那样),最远(即不同)的向量将具有距离 2。

还有一个注意事项:维基百科文章 http://en.wikipedia.org/wiki/Cosine_similarity指出这个 cosDist 在数学意义上不是一个适当的距离度量(三 Angular 不等式在这里通常不成立)但根据我的经验,当使用这个函数进行层次聚类时,这在实践中不是问题。它经常以这种方式使用。然而,有一种方法可以从余弦中推导出真正的距离度量,在同一篇维基百科文章中也提到过:https://en.wikipedia.org/wiki/Cosine_similarity#Angular_distance_and_similarity

关于Javascript Clusterfck 指标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11655021/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com