我正在做一些涉及文档比较的工作。为此,我正在分析每个文档,并基本上计算每个文档中某些关键词出现的次数。例如:
Document 1: Document 2:
Book -> 3 Book -> 9
Work -> 0 Work -> 2
Dollar -> 5 Dollar -> 1
City -> 18 City -> 6
所以在计数过程之后,我将所有这些数字序列存储在一个向量中。这个数字序列将代表每个文档的特征向量。
Document 1: [ 3, 0, 5, 18]
Document 2: [ 9, 2, 1, 6]
最后一步是对
[0 1]
范围内的数据进行标准化。但在这里我意识到这可以通过两种不同的方法来完成:按照第一种方法,归一化的结果将是:
Document 1: [ 0.11538, 0.00000, 0.19231, 0.69231] (divided by 26)
Document 2: [ 0.50000, 0.11111, 0.05556, 0.33333] (divided by 18)
在遵循第二种方法时,结果将是:
Document 1: [ 0.16667, 0.00000, 0.27778, 1.00000] (divided by 18)
Document 2: [ 1.00000, 0.22222, 0.11111, 0.66667] (divided by 9)
对于此特定情况:
最佳答案
符号
假设您有两个向量 A
和 B
,您使用 x
作为 A
的归一化常数,使用 y
作为 B
的归一化常数。由于您正在计算单词出现次数,我们可以假设 x > 0
和 y > 0
。
余弦距离
对于下面显示的余弦距离,将抵消归一化常数。很容易看出,你最终会在枚举器处得到一个常量 1/(xy)
,在分母处得到一个相同的常量 1/(xy)
。所以你可以取消 1/(xy)
。
欧几里得距离
对于欧几里德距离,上面的情况并非如此。我在下面列出了一个例子,假设 A
和 B
是二维向量。 n 维向量只是一个简单的扩展。 A'
和 B'
分别是 A
和 B
的归一化向量。
将 dist(A,B)
的非规范化版本与 dist(A',B')
的规范化版本进行比较,您可以看到:您选择的规范化常数(最大值或总和)决定了 x1^2+x2^2
、 y1^2+y2^2
和交互项的权重。因此,不同的归一化常数会给你不同的距离。
特征向量
如果这是出于某种信息检索目的或主题提取,您是否尝试过 TF-IDF ?这可能比纯粹计算术语的出现次数更好。
关于pattern-matching - 按最大值或总值归一化?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13638464/