余弦相似度算法java
时间: 2024-03-18 09:37:01 浏览: 80
余弦相似度算法是一种常用的衡量两个向量之间相似度的方法,它可以用于文本相似度计算、推荐系统等领域。在Java中,可以通过以下步骤来实现余弦相似度算法:
1. 首先,需要将文本转换为向量表示。可以使用词袋模型或者TF-IDF等方法将文本转换为向量。
2. 计算两个向量的内积。内积可以通过遍历两个向量的对应维度,将对应维度的值相乘后累加得到。
3. 计算两个向量的模长。模长可以通过遍历向量的每个维度,将对应维度的值平方后累加得到,再对结果进行开方。
4. 计算余弦相似度。将步骤2中计算得到的内积除以步骤3中计算得到的模长乘积即可得到余弦相似度。
下面是一个简单的Java代码示例:
```java
import java.util.HashMap;
import java.util.Map;
public class CosineSimilarity {
public static double calculateCosineSimilarity(Map<String, Integer> vector1, Map<String, Integer> vector2) {
double dotProduct = 0.0;
double magnitude1 = 0.0;
double magnitude2 = 0.0;
for (String key : vector1.keySet()) {
if (vector2.containsKey(key)) {
dotProduct += vector1.get(key) * vector2.get(key);
}
magnitude1 += Math.pow(vector1.get(key), 2);
}
for (String key : vector2.keySet()) {
magnitude2 += Math.pow(vector2.get(key), 2);
}
magnitude1 = Math.sqrt(magnitude1);
magnitude2 = Math.sqrt(magnitude2);
return dotProduct / (magnitude1 * magnitude2);
}
public static void main(String[] args) {
// 示例向量
Map<String, Integer> vector1 = new HashMap<>();
vector1.put("apple", 2);
vector1.put("banana", 3);
vector1.put("orange", 1);
Map<String, Integer> vector2 = new HashMap<>();
vector2.put("apple", 1);
vector2.put("banana", 2);
vector2.put("grape", 4);
double similarity = calculateCosineSimilarity(vector1, vector2);
System.out.println("余弦相似度:" + similarity);
}
}
```
这段代码中,我们定义了一个`calculateCosineSimilarity`方法来计算余弦相似度。通过传入两个向量的词频统计结果,即`Map<String, Integer>`类型的`vector1`和`vector2`,可以得到它们之间的余弦相似度。
阅读全文