Предположим, у вас есть таблица в базе данных, построенной следующим образом:SQL Вычисление косинуса подобии
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
Заметим, что так как векторы сохраняются в базы данных, нам нужно хранить только ненулевые записи. В этом примере мы имеем только два вектора $ v_ {99} = (4,3,4,0) $ и $ v_ {1234} = (0,5,2,3) $ как в $ \ mathbb {R}^4 $.
Косинус подобия этих векторов должен быть $ \ displaystyle \ frac {23} {\ sqrt {41 \ cdot 38}} = 0.5826987807288609 $.
Как вы вычисляете сходство с косинусом, используя почти только SQL
?
Я говорю почти, потому что вы будете нуждаться в функции sqrt
, не всегда при условии в основных SQL
реализаций, например, оно не в sqlite3
!