java - 如何计算两个 vector 的余弦相似度?

标签 java vector trigonometry tf-idf

如何找到 vector 之间的余弦相似度?

我需要找到相似度来衡量两行文本之间的相关性。

例如,我有两句话:

system for user interface

user interface machine

…以及它们各自的 vector 在 tF-idf 之后,然后使用 LSI 进行归一化,例如 [1,0.5][0.5,1].

如何测量这些 vector 之间的相似度?

最佳答案

如果你想避免依赖第三方库来完成这样一个简单的任务,这里有一个简单的 Java 实现:

public static double cosineSimilarity(double[] vectorA, double[] vectorB) {
    double dotProduct = 0.0;
    double normA = 0.0;
    double normB = 0.0;
    for (int i = 0; i < vectorA.length; i++) {
        dotProduct += vectorA[i] * vectorB[i];
        normA += Math.pow(vectorA[i], 2);
        normB += Math.pow(vectorB[i], 2);
    }   
    return dotProduct / (Math.sqrt(normA) * Math.sqrt(normB));
}

请注意,该函数假定两个 vector 具有相同的长度。您可能需要明确检查它的安全性。

关于java - 如何计算两个 vector 的余弦相似度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/520241/

相关文章:

scala - Spark 中通过 DIMSUM 进行余弦相似度计算

java - 如何获得三角函数的用户友好值?

javascript - 创建只有长度的 svg 六边形点

java - neo4j 2 与 jdk 6 兼容吗?

java - 如何按特定顺序应用我的 JUnit 规则?

c++ - 如何调整作为结构或类成员的 vector 的大小?

C++ remove_if 覆盖我的 vector

java - 如果补丁失败,不会调用 liquibase 回滚

java - 在 JTS 上处理几何端 WKBwriter 时出现的问题

c++ - 我有内存不一致吗?苹果系统