【发布时间】:2017-07-07 17:32:28
【问题描述】:
假设您在数据库中有一个表,构造如下:
create table data (v int, base int, w_td float);
insert into data values (99,1,4);
insert into data values (99,2,3);
insert into data values (99,3,4);
insert into data values (1234,2,5);
insert into data values (1234,3,2);
insert into data values (1234,4,3);
要明确select * from data 应该输出:
v |base|w_td
--------------
99 |1 |4.0
99 |2 |3.0
99 |3 |4.0
1234|2 |5.0
1234|3 |2.0
1234|4 |3.0
请注意,由于向量存储在数据库中,我们只需要存储非零条目。在这个例子中,我们在 $\mathbb{R} 中只有两个向量 $v_{99} = (4,3,4,0)$ 和 $v_{1234} = (0,5,2,3)$ ^4 美元。
这些向量的余弦相似度应该是 $\displaystyle \frac{23}{\sqrt{41 \cdot 38}} = 0.5826987807288609$。
您如何几乎只使用SQL 来计算余弦相似度?
我说差不多是因为你需要sqrt 函数,基本的SQL 实现中并不总是提供它,例如它不在sqlite3 中!
【问题讨论】:
-
您实际上可以通过编译和使用数学扩展库在sqlite3中使用
sqrt。详情请见here。
标签: sql cosine-similarity