问题标签 [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 投票
2 回答
11391 浏览

machine-learning - 向量之一全为零时的余弦相似度

如何表示余弦相似度(http://en.wikipedia.org/wiki/Cosine_similarity

当其中一个向量全为零时?

v1 = [1, 1, 1, 1, 1]

v2 = [0, 0, 0, 0, 0]

当我们根据经典公式计算时,我们得到除以零:

我想在集群应用程序中使用这种相似性度量。我经常需要比较这些向量。还有 [0, 0, 0, 0, 0] 与 [0, 0, 0, 0, 0]

你有什么经验吗?由于这是一个相似性(不是距离)度量,我应该使用特殊情况

d( [1, 1, 1, 1, 1]; [0, 0, 0, 0, 0] ) = 0

d([0, 0, 0, 0, 0]; [0, 0, 0, 0, 0] ) = 1

关于什么

d([1, 1, 1, 0, 0]; [0, 0, 0, 0, 0] ) = ? 等等

0 投票
1 回答
3650 浏览

python - cosine similarity for latex code of an equation

I have extended this SO question & is comparing two latex equations. Here is two quadratic equation's example.

I need to compare these as correct, because, instead of x, b, I have use * for that. All I am doing is converting equations to word list.

so the vector is

Now my extension is I am checking the percentage of * in eqn1_word, then check with normal cosine similarity as given by that answer. At last, I am adding two values, which has to nearly equal to 1.

This works fine for most of scenario(if one variable is replaced by *). Here is * value is 3 for eqn1_vec, and in eqn2_vec b = 2, x=1.

For more description & better understanding please check this. From that reference, my code is like this.

The problem is numerator is getting small as intersection value is small. I have copied from my class. please ignore self.

How to solve this. Thanks in advance. If there is any mistake in question or my concept is wrong, please share with me.

0 投票
2 回答
71 浏览

python - How to measure contents differences within lists

Don't want to cause confusion here. The reason I want a value attached with each list is I want to use contents within each list as a feature value for clustering algorithms. The original idea is I have 1000 items each with a list of company names. I want to transform this list contents into a value. That's why I want each value attached to each list as one of the features for this item.... Thanks.... (Also that's why I use a base list..)

I'm trying to use python to analyze some texts and now I have 1000 lists, each contains list of company names. For example:

I want to measure these lists similarities. list1 and list2 has 0 similarities, but list1 and list3, list2 and list3 have some similarities. But how to measure it?

Initially I thought about using one base vector which contains all the words from these lists. Here this base list could be:

and its vector value is:

Then each of these lists has vector values according to both the word appearance and its positions. (Here, base_list, list1, list2, list3 are all sorted)

I want to measure their differences (or similarities) by comparing each of them with the base_vector, to get the angle value.

But! A big issue could be

Then their angle value with the base vector are the same!

And suggestions? About how I can measure the similarities of the contents within lists? I mean I don't have to use this vector method, I just got blocked.

Thanks!

0 投票
2 回答
1593 浏览

python - 如何迭代字典键以使用值计算余弦相似度?

我有一本这样的字典:

我想计算每个单词之间的余弦相似度,我为此编写了一个带有两个向量的函数。首先,它将为 'in' 和 'and' 取值,然后它应该为 'in' 和 'to' 取值等等。

我希望它将结果存储在另一个字典中,其中“in”应该是键,值应该是计算余弦相似度后返回的值。同样,我也想要字典。

这是我计算余弦相似度的函数:

vec1 和 vec2 可以是两个列表,例如:[0.01, -0.07, 0.09, -0.02][0.2, 0.3, 0.5, 0.6],它返回的结果如下:0.14

如何以这种方式为每个键计算它并以这种方式将结果存储在字典中?:

0 投票
1 回答
37 浏览

python - 如何使用这些功能创建字典字典?

我有一本这样的字典:

我想计算每个单词之间的余弦相似度,我有一个余弦相似度函数,该函数采用两个向量。首先,它将为 'in' 和 'and' 取值,然后它应该为 'in' 和 'to' 取值等等。

我希望它将结果存储在另一个字典中,其中“in”应该是键,值应该是每个计算的余弦相似度值与该键的字典。就像我希望输出是这样的:

以下是执行所有这些操作的代码:

但是,它给出的结果是这样的:

我希望它是这样的:

我觉得是因为在resultInDict函数中我定义了一个新字典new_dict来为内部字典添加键值,但是每次调用函数resultInDict时,都会清空这一行的new_dict new_dict={},只添加一个键值对.

我怎样才能解决这个问题??

0 投票
1 回答
3535 浏览

similarity - 皮尔逊相关相似度和调整余弦相似度有什么区别?

虽然它们非常相似,但我确信 Pearson 相关相似度和调整余弦相似度之间存在一些差异,因为所有的论文和网页都将它们分为两种不同的类型。

然而,它们都没有提供明确的定义。是其中一页。

谁能说出区别?

谢谢

0 投票
1 回答
7648 浏览

python-2.7 - 使用 python 2.7 在文档中计算 tf-idf

我有一个场景,我从互联网上检索信息/原始数据并将它们放入各自的 json 或 .txt 文件中。

从那时起,我想通过使用 tf-idf 计算每个文档中每个术语的频率及其余弦相似度。

例如:有 50 个不同的文档/文本文件,每个文件包含 5000 个单词/字符串对于所有 50 个文档/文本,依此类推。

每个频率的预期输出将从 0 -1

我怎么能这样做。我一直在指 sklear 包,但它们中的大多数在每次比较中只包含几个字符串。

0 投票
0 回答
79 浏览

python - 将余弦相似度转换为它们各自的字符串

我正在根据许多字符串句子的余弦相似度进行聚类。例如,字符串 a 和字符串 b 的余弦相似度接近于字符串 c 和字符串 b。聚类方法将以列表形式将它们组合在一起,但被组合的值是两个余弦值。

我希望在他们的分组中显示实际的字符串。但是我的聚类方法只接受余弦相似度值。有什么方法可以将它们转换回初始字符串?

0 投票
4 回答
788 浏览

java - Java 中的余弦相似度性能比等效 C 慢 15 倍?

我有两个函数,每个函数都计算两个不同向量的余弦相似度。一种是用 Java 编写的,一种是用 C 编写的。

在这两种情况下,我都声明了两个内联的 200 个元素数组,然后计算它们的余弦相似度 100 万次。我没有计算 jvm 启动的时间。Java 实现比 C 实现慢了近 15 倍。

我的问题是:

1.) 假设对于简单数学的紧密循环,c 仍然比 java 快一个数量级是否合理?

2.) java 代码中是否有一些错误,或者一些合理的优化会大大加快它的速度?

谢谢。

C:

$时间./余弦相似度

0m2.952s

爪哇:

$ java -cp 。-server -Xms2G -Xmx2G CosineSimilarity

耗时 44 秒

编辑:

Math.pow 确实是罪魁祸首。删除它使性能与 C 的性能相当。

0 投票
0 回答
389 浏览

machine-learning - 放大局部敏感哈希

我正在尝试构建一个余弦局部敏感哈希,这样我就可以找到候选的相似项目对,而无需比较每个可能的对。我基本上可以正常工作,但我数据中的大多数对似乎在 -0.2 到 +0.2 范围内具有余弦相似度,所以我试图将它切得很细,并挑选余弦相似度为 0.1 及以上的东西。

我一直在阅读《挖掘海量数据集》第 3 章。这谈到了通过 Amplifying Locality-Sensitive Family 来提高候选对选择的准确性。我想我只是理解数学解释,但我很难看到我是如何实际实现的。

到目前为止我所拥有的如下

  1. 我说过 1000 部电影,每部电影都有来自 100 万用户的评分。每部电影由用户分数的稀疏向量表示(行号 = 用户 ID,值 = 用户分数)
  2. 我构建了 N 个随机向量。矢量长度与电影矢量的长度(即用户数量)相匹配。向量值为 +1 或 -1。我实际上将这些向量编码为二进制以节省空间,+1 映射到 1,-1 映射到 0
  3. 我通过获取电影的点积和 N 个随机向量中的每一个来为每部电影构建草图向量(或者更确切地说,如果我通过水平放置 N 个随机向量并将它们彼此叠加来创建矩阵 R,那么草图对于电影 m 是 R*m),然后取结果向量中每个元素的符号,所以我以 +1s 和 -1s 的每个电影的草图向量结束,我再次将其编码为二进制。每个向量的长度为 N 位。
  4. 接下来,我通过执行以下操作来寻找类似的草图
    1. 我将草图矢量分成 r 位的 b 条带
    2. 每个 r 位带是一个数字。我将该数字与乐队编号结合起来,并将电影添加到该数字下的哈希桶中。每部电影可以添加到多个存储桶中。
    3. 然后我查看每个桶。同一桶中的任何电影都是候选对。

将此与 mmds 的 3.6.3 进行比较,我的 AND 步骤是当我查看 r 位带时 - 如果 r 位具有相同的值,则一对电影通过 AND 步骤。我的 OR 步骤发生在桶中:如果电影都在任何桶中,它们就是候选对。

这本书建议我可以通过添加更多的 AND 和 OR 步骤来“放大”我的结果,但我不知道如何实际做到这一点,因为对进一步层的构造过程的解释是检查成对相等性而不是想出桶号。

谁能帮我理解如何做到这一点?