我正在做一些涉及文档比较的工作。为此,我正在分析每个文档,并基本上计算每个文档中某些关键词出现的次数。例如:

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)
    

    对于此特定情况:
  • 这两种方法中哪一种会增强特征向量的表示和比较?
  • 结果是否相同?
  • 使用特定的相似性度量(欧几里得、余弦)时,这些方法中的任何一种会更有效吗?
  • 最佳答案

    符号

    假设您有两个向量 AB ,您使用 x 作为 A 的归一化常数,使用 y 作为 B 的归一化常数。由于您正在计算单词出现次数,我们可以假设 x > 0y > 0

    余弦距离

    对于下面显示的余弦距离,将抵消归一化常数。很容易看出,你最终会在枚举器处得到一个常量 1/(xy) ,在分母处得到一个相同的常量 1/(xy) 。所以你可以取消 1/(xy)

    欧几里得距离

    对于欧几里德距离,上面的情况并非如此。我在下面列出了一个例子,假设 AB 是二维向量。 n 维向量只是一个简单的扩展。 A'B' 分别是 AB 的归一化向量。

    dist(A,B) 的非规范化版本与 dist(A',B') 的规范化版本进行比较,您可以看到:您选择的规范化常数(最大值或总和)决定了 x1^2+x2^2y1^2+y2^2 和交互项的权重。因此,不同的归一化常数会给你不同的距离。

    特征向量

    如果这是出于某种信息检索目的或主题提取,您是否尝试过 TF-IDF ?这可能比纯粹计算术语的出现次数更好。

    关于pattern-matching - 按最大值或总值归一化?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13638464/

    10-12 16:51