问题标签 [cosine-similarity]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
749 浏览

similarity - 将 TFIDF 用于相对频率、余弦相似度

我正在尝试使用 TFIDF 作为相对频率来计算余弦距离。我从一个文档中选择了 10 个单词说:文件 1 并从我的文件夹中选择了另外 10 个文件,使用 10 个单词及其频率来检查 10 个文件中哪些与文件 1 相似。说文件夹中的文件总数是46.我知道 DF(是该单词出现在的文档数) IDF(是 log(文件总数(46)/DF)和 TFIDF(是 TF(一个文档中单词的频率)的乘积)和以色列国防军)

问题:

  1. 假设我上面所说的是 100% 正确,在获得一个文档中所有 10 个单词的 TFIDF 之后说:文件 2,我是否将 10 个单词中的每一个单词的所有 TFIDF 加在一起以获得文件 2 的 TFIDF?

  2. 余弦距离是多少?

谁能帮忙举个例子?

0 投票
3 回答
1914 浏览

elasticsearch - Elasticsearch 评分

我正在使用 elasticsearch 使用“更像这样”查询来查找与给定文档相似的文档。

有没有一种简单的方法可以让弹性搜索得分在 0 和 1 之间(使用余弦相似度)?

谢谢!

0 投票
3 回答
8233 浏览

cluster-analysis - 余弦距离作为 k 均值的向量距离函数

我有一个 N 个顶点的图,其中每个顶点代表一个地方。我还有向量,每个用户一个,N 个系数中的每一个,其中系数的值是在相应位置花费的持续时间(以秒为单位),如果没有访问该位置,则为 0。

例如图表:

示例图

向量:

意味着我们花了:

(未访问的顶点 3 和 5,因此为 0)。

我想运行一个 k-means 聚类,我选择cosine_distance = 1 - cosine_similarity了作为距离的度量,其中的公式cosine_similarity是:

余弦相似度公式

如此处所述。

但我注意到以下内容。假设k=2其中一个向量是:

在求解最小化与候选质心总距离的优化问题的过程中,假设在某一点,2个候选质心为:

运行cosine_distance(v1, c1) 和 (v1, c2) 的公式,我们得到的距离完全相同0.5527864045

我会假设 v1 与 c1 比 c2 更相似(更接近)。显然情况并非如此。

Q1。为什么这个假设是错误的?

Q2。对于这种情况,余弦距离是正确的距离函数吗?

Q3。考虑到问题的性质,什么会更好?

0 投票
1 回答
697 浏览

similarity - 使用欧几里得距离的相对频率

如何使用相对频率计算两个文档(例如 D1 和 D2)之间的欧几里德距离(相似度) ?

下面是使用绝对频率的两个文档之间的余弦和欧几里得距离的示例。

余弦 D1,D2 = (4x4+9x5) / 12.45x10.72 = 0.4569(绝对频率和相对频率)余弦绝对频率与相对频率相同

欧几里得 D1, D2 = sqrt( sqr(4-4) + sqr(9-5) + sqr(7) + sqr(7) + sqr(5) + sqr(3) ) =sqrt( 0+16+49+ 49+25+9) = sqrt( 148 ) = 12.17(绝对频率)。

相对频率为0.2532

我试图获得这个问题的相对频率(欧几里得),我还没有找到任何有帮助的教程。在没有公式或解释的情况下,我只能找到答案0.2532 。

0 投票
3 回答
1249 浏览

python - 使用 Python 查找 2 个编号数据集之间的余弦相似度

我对长度为 22 的数据集进行了编号,其中每个数字可以位于 0 到 1 之间,代表该属性的百分比。

如何使用 Python 计算这两个数据集之间的余弦相似度?

0 投票
1 回答
176 浏览

recommendation-engine - 这是一种可行的用户项目推荐方法吗

我正在设计一个应用程序,它包含基于用户交互(协同过滤)的推荐系统。在他的主页上向用户展示了一组 6 个要与之交互的项目。将有 50 到 300 个项目。可以执行以下操作:

  1. 点击一个项目(强烈的兴趣)
  2. 刷新一个项目(一些兴趣)
  3. 打开一个阅读更多对话框(一些兴趣)
  4. 不要做任何事情(没有兴趣)

这些数据被收集和存储。系统应该向用户推荐感兴趣的项目。我正在考虑将这些数据转化为评级系统。

选项 A)如果用户点击一个项目,这将被转换为 5 的隐含生命周期评级。将项目刷新为 4,依此类推。所以我的 user->item 矩阵看起来像这样:

在这个例子中,john 点击了第 1 项并刷新了第 3 项。评级只能真正上升,即如果用户之前刷新过一个项目,我写一个 4,如果稍后单击该项目,则只更新为 5。

选项 B) 每次用户执行上述操作之一时,我都会为项目增加一个标量值,这意味着它可以无限增长。

也许这是个问题,因为现在这些数字更难转化为从 1 到 10 的等级量表

选项 C)我分别计算每次交互

这里的问题是“阅读”一个项目可能只完成一次。

与我选择的任何选项无关,我的想法是首先使用余弦相似度或皮尔逊相关性等方法找到相似的用户。然后从该列表中挑选前 10 到 30 名用户,并编制一份他们最喜欢的项目的顶级列表。然后,我将从该列表中推荐当前用户过去几乎没有互动过的项目。

这是可行的吗?我担心找到相似的用户会消除为当前用户找到有趣(新)项目的机会。

0 投票
1 回答
1990 浏览

cluster-analysis - 关于余弦相似度的一些问题

昨天我了解到余弦相似度,定义为

在此处输入图像描述

可以有效地衡量两个向量的相似程度。

我发现这里的定义使用 L2-norm 来规范化 and 的点积AB我感兴趣的是为什么不在分母中使用Aand的 L1-norm?B

我的老师告诉我,如果我在分母中使用 L1 范数,那么余弦相似度不会为 1,如果A=B。然后,我进一步问他,如果我将余弦相似度定义修改如下,修改后的模型与原始模型相比有哪些优点和缺点?

sim(A,B) = (A * B) / (||A||1 * ||B||1) 如果 A!=B

sim(A,B) = 1 如果 A==B

如果有人能给我更多的解释,我将不胜感激。

0 投票
1 回答
725 浏览

data-mining - 更好地理解余弦相似度

我正在做一些关于文本挖掘和数据挖掘的研究。我需要更多帮助来理解余弦相似度。我已经阅读过它并注意到互联网上所有给定的示例在通过余弦相似度计算之前都使用了 tf-idf。

我的问题

是否可以仅通过使用将作为数据集的文本文件中的最高频率分布来计算余弦相似度。我浏览的大多数视频和教程都在将其数据输入余弦相似度之前运行了 tf-idf,如果没有,还有哪些其他类型的方程/算法可以输入余弦相似度?

2.为什么用tf-idf归一化来计算余弦相似度?(我可以不进行归一化吗?)余弦相似度是根据 tf-idf 输出的归一化计算得出的。为什么需要标准化?

3. tf-idf 的权重实际上有什么余弦相似度?

0 投票
0 回答
381 浏览

python - 需要对这些向量进行相似性度量

我有一个 Python 函数,它接收一块文本并返回它的特殊 2D 向量/字典表示,具体取决于选择的长度n。示例输出可能如下所示:

从 1 到n的键代表输入文本中的位置;例如,如果 n = 12,则密钥 5 将保存大约 5/12 到文档中的数据。

每个键的整数列表的长度是任意的;因此,另一个文本块,对于相同的n值,可以很好地产生这个:

我想为任何两个长度相同的向量创建一个相似性度量n。我尝试过的一件事是只考虑字典中每个整数列表的平均值,从而提供简单的一维向量以进行简单的余弦比较。

但这会丢失比我想要的更多的信息(更不用说偶尔出现 None 值的麻烦)。

由于我可以通过选择不同的 *n*s 来创建表示的不同向量/不同的“粒度”,因此获取两个文档,在匹配的 *n*s 范围内创建多个向量对,然后进行某种操作是否有价值平均值的平均值?

还是以完全不同的方式处理事情会更好?我可以将输入文本表示为一维向量,仍然可以得到我想要的想法,但它们最终会变成不同的长度,这可能会使比较复杂化。(想想看,原始表示中每个键的不同长度并不能完全解决这个问题......哈。但仍然......)

0 投票
1 回答
1121 浏览

python - 信息检索、倒排索引问题

嗨,我正在尝试编写一个小程序来索引 xml 集合中的一些文档。我使用 tf-idf 方法。现在,当我的程序读取查询时,它会为每个文档中的每个单词返回一个元组列表('tf-idf'、'docid')。

这是一个例子:

在这种情况下,文档 2 里面只有一个单词。

现在我的问题是:我知道我必须在这些文档和查询之间做点积,但我该怎么做呢?如何将查询转换为权重向量?

谢谢你。