白筱汐

想都是问题,做都是答案

0%

余弦相似度

前言

余弦相似度是一种衡量两个向量之间相似性的度量方法。在向量空间中,给定两个非零向量A和B,它们的余弦相似度定义为它们的内积除以它们的模的乘积。用公式表示为:
cosine_similarity = (A · B) / (||A|| * ||B||)
其中,A · B表示向量A和B的内积,||A||和||B||分别表示向量A和B的模(长度)。
余弦相似度的取值范围在-1到1之间,值越接近1表示两个向量越相似,值越接近-1表示两个向量越不相似,值为0表示两个向量正交(没有相似性)。
在计算机科学和自然语言处理等领域,余弦相似度常用于文本相似度计算、推荐系统、聚类分析等任务

js代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// 计算向量的内积
// A · B = a1 * b1 + a2 * b2 + ... + an * bn
function dotProduct(vector1, vector2) {
let result = 0;
for (let i = 0; i < vector1.length; i++) {
result += vector1[i] * vector2[i];
}
return result;
}

// 计算向量的模
// ||V|| = sqrt(v1^2 + v2^2 + ... + vn^2)
function vectorNorm(vector) {
let squaredSum = 0;
for (let i = 0; i < vector.length; i++) {
squaredSum += vector[i] * vector[i];
}
return Math.sqrt(squaredSum);
}

// 计算余弦相似度
function cosineSimilarity(vector1, vector2) {
const dot = dotProduct(vector1, vector2);
const norm1 = vectorNorm(vector1);
const norm2 = vectorNorm(vector2);

const similarity = (norm1 !== 0 && norm2 !== 0) ? dot / (norm1 * norm2) : 0;
return similarity;
}

// 示例向量
const vectorA = [1, 2, 3];
const vectorB = [4, 5, 6];

// 计算余弦相似度
const similarity = cosineSimilarity(vectorA, vectorB);

console.log("余弦相似度:", similarity);