【问题标题】:How to calculate cosine similarity for two different sizes vector如何计算两个不同大小向量的余弦相似度
【发布时间】:2016-07-11 07:56:55
【问题描述】:

我需要计算包含数字行的大文件的余弦相似度,例如:

6 3 574

11 1 6 575 576 321

4 577 6 64

69 11 6 55

11 218 6 578 579 580 581 229 582 583 155 100 584 148 446 585

我已经将它存储在一个字符串矩阵中,这使得拆分并且每个数字都是不同的单元格。

string[] lines = FileBuff.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None);
            FileMatrix = new string[lines.Length][];
            for (int i = 0; i < lines.Length; i++)
            {
                FileMatrix[i] = lines[i].Split(new string[] { "\t", " " }, StringSplitOptions.None);
            }

我的问题是如何计算行的余弦相似度 不同的尺寸?
对于计算分子,它的大小必须相同 (A[i]*B[i]+A[i+1]*B[i+1]+.....)

我找到了这个例子,它和我的问题一样,只是用字母:

Document 1: The quick brown fox jumped over the lazy dog.

Global order:     The quick brown fox jumped over the lazy dog
Vector for Doc 1:  1    1     1    1     1     1    1   1   1

Document 2: The runner was quick.

Global order:     The quick brown fox jumped over the lazy dog runner was
Vector for Doc 1:  1    1     1    1     1     1    1   1   1
Vector for Doc 2:  1    1     0    0     0     0    0   0   0    1     1

在这种情况下,理论上我需要在 Document 1 向量的末尾填充零。我需要一些代码的帮助来实现它

【问题讨论】:

  • 所以每一行都是一个向量?例如您的示例的第一行是 3D 矢量,第二行是 5D 矢量?
  • 那么称它为向量可能是不对的,所以可以把它看成是行数,应该为每一对行计算它们之间的余弦相似度
  • 好吧,只是因为您将其称为其他不会使问题消失的东西。 AFAIK 你需要相同数量的维度来计算余弦相似度。但是,您可以找出最长的向量/行有多长,并用缺失维度的默认值(例如零)填充所有较短的向量/行。如果你不知道数据代表什么,你就无法真正确定相似性......

标签: c# data-mining cosine-similarity


【解决方案1】:

向量必须具有相同的长度。如果不是,则必须用零填充维度较小的那个。基本上逻辑如下:

考虑 2 个向量:(0,1) 和 (0,0,1)。

第一个是 2D,第二个是 3D。您可以将 2D 矢量视为 3D 矢量,但位于 (x,y) 平面中。所以 (0,1) 等价于 (0,1,0)。

另请参阅the Python section 中对此问题的答案。

【讨论】:

    【解决方案2】:

    视情况而定。

    如果你的数据应该是一个连续的向量空间,那么向量必须是相同的长度。

    如果您的数据是稀疏向量,则根据定义缺失值是 0(通常)。

    您的数据看起来好像只有 1 的 索引

    然后余弦归结为计算交点大小(除以几何平均长度);我会选择 Jaccard 来处理此类数据。

    您需要知道输入格式 - 有多种答案,除非您提供基本信息数据是如何编码的,以及它的含义。

    【讨论】:

    • 在我的项目中,我得到了一个大的数字数据集(很多行 - 我展示的 5 行只是一个例子),我需要在 Jaccard 距离和余弦相似度之间进行比较,以获得距离,然后使用K-means算法。所以我的问题是如何计算公式中的分子?
    • 什么是 574? 需要回答这个问题。如果这些是随机数,请停止使用随机数。 (附注:在其他距离上使用 k-means)。
    猜你喜欢
    • 2010-10-05
    • 1970-01-01
    • 2017-09-07
    • 2016-03-06
    • 2019-12-27
    • 2014-03-25
    • 2016-10-28
    • 2011-03-08
    • 2016-03-08
    相关资源
    最近更新 更多