【发布时间】: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