Math 余弦相似空间中的数

Math 余弦相似空间中的数,math,Math,我想表示向量空间中某个范围内的实数,这样在向量空间中越接近的数也越接近,接近度可以用余弦距离来测量 例如,在0-100之间,9和10的余弦相似性应接近于1,9和100的余弦相似性应接近于-1 如何实现这样的映射?我想尝试一个神经网络编码器,但有没有其他方法来实现这一点 在二维向量空间的特殊情况下,这很容易做到。我将对范围[0100]进行说明,尽管很容易推广到其他区间 将单位圆视为以原点为中心的模拟时钟。将[0100]中的点x映射到秒针0.3x秒到一分钟的位置。对于x=0,秒针指向12,相应的向量

我想表示向量空间中某个范围内的实数,这样在向量空间中越接近的数也越接近,接近度可以用余弦距离来测量

例如,在0-100之间,9和10的余弦相似性应接近于1,9和100的余弦相似性应接近于-1


如何实现这样的映射?我想尝试一个神经网络编码器,但有没有其他方法来实现这一点

在二维向量空间的特殊情况下,这很容易做到。我将对范围
[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