Math 余弦相似空间中的数
我想表示向量空间中某个范围内的实数,这样在向量空间中越接近的数也越接近,接近度可以用余弦距离来测量 例如,在0-100之间,9和10的余弦相似性应接近于1,9和100的余弦相似性应接近于-1Math 余弦相似空间中的数,math,Math,我想表示向量空间中某个范围内的实数,这样在向量空间中越接近的数也越接近,接近度可以用余弦距离来测量 例如,在0-100之间,9和10的余弦相似性应接近于1,9和100的余弦相似性应接近于-1 如何实现这样的映射?我想尝试一个神经网络编码器,但有没有其他方法来实现这一点 在二维向量空间的特殊情况下,这很容易做到。我将对范围[0100]进行说明,尽管很容易推广到其他区间 将单位圆视为以原点为中心的模拟时钟。将[0100]中的点x映射到秒针0.3x秒到一分钟的位置。对于x=0,秒针指向12,相应的向量
如何实现这样的映射?我想尝试一个神经网络编码器,但有没有其他方法来实现这一点 在二维向量空间的特殊情况下,这很容易做到。我将对范围
[0100]
进行说明,尽管很容易推广到其他区间
将单位圆视为以原点为中心的模拟时钟。将[0100]
中的点x
映射到秒针0.3x
秒到一分钟的位置。对于x=0
,秒针指向12,相应的向量为
。对于x=50
,秒针将指向3,x
将映射到
。对于x=100
,秒针指向6,x
将映射到
映射的公式为:
f(x) = <sin(1.8*x),cos(1.8*x)> #measured in degrees
比如说,
>>> u = to_vector(9,0,100)
>>> u
(0.2789911060392293, 0.9602936856769431)
>>> v = to_vector(10,0,100)
>>> v
(0.3090169943749474, 0.9510565162951535)
>>> w = to_vector(100,0,100)
>>> w
(1.2246467991473532e-16, -1.0)
>>> similarity(v,u)
0.9995065603657316
>>> similarity(v,w)
-0.9510565162951536
编辑:这里有一种更抽象的方法,可用于构建任何维度的示例
从任何连续的一对一映射开始g:[a,b]\rightarrow R^n
(其中R^n
是n维欧几里德空间)。因为是一对一,g(a)!=g(b)
。设m
为连接g(a)
和g(b)
的线段的中点。因此m=(g(a)+g(b))/2
。定义另一个函数,如下所示:
f(x) = g(x) - m
不难看出:
x
和y
接近,则f(x)
和f(y)
之间的余弦相似性接近1
x
接近a
并且y
接近b
,那么f(x)
和f(y)
之间的余弦相似性接近-1
通过适当选择
g
,您可以构造一些有趣的示例,例如g
可能是R^3
中螺旋线完全扭曲的参数化,这是一件奇怪的事情。余弦相似性的目的是比较向量,就像我们比较实数一样——你想走另一条路。比较实数很容易——为什么要让它更复杂?这里的背景是什么?除此之外,向量空间(通常)比其他集合有更多的成员,这对多维空间来说是不可能的。
f(x) = g(x) - m