相关度
欧氏距离相似度
- R 2 空间的相似度 R^2空间的相似度 R2空间的相似度
get_xy([X|Y],X,Y).
distance(X,Y,Result):-get_xy(X,X1,Y1),get_xy(Y,X2,Y2),
pow(X2-X1,2,D1),pow(Y2-Y1,2,D2),
D is D1+D2,sqrt(D,Result).
like(A,B):-distance(A,B,Result),write(Result).
?-
| load('e:/learn/learn.pro').
Correct to: "win_menu:load('e:/learn/learn.pro')"?
Please answer 'y' or 'n'? yes
true.
?- like([11,22],[-9,24]).
20.09975124224178
true.
- R n 空间的相似度 R^n空间的相似度 Rn空间的相似度
get_xij([Xij|Tail],Xij,Tail).
get_x12(A,B,X1,X2,Tail1,Tail2):-get_xij(B,X2,Tail2),get_xij(A,X1,Tail1).
distance_i(A,B,D,Result):- get_x12(A,B,Xi1,Xi2,Tail1,Tail2),pow(Xi2-Xi1,2,Di),
Dj is D+Di,distance_i(Tail1,Tail2,Dj,Result).
distance_i([],[],D,Result):- Result is sqrt(D).
like(A,B):-distance_i(A,B,0,Result),write(Result).
?- load('e:/learn/learn.pro').
Correct to: "win_menu:load('e:/learn/learn.pro')"? yes
true.
?- like([11,22,33,44],[-24,45,-9,34]).
60.149812967290266
true.
?-
- 找到最相似度的值(可以是某人,某物体等等)
get_xij([Xij|Tail],Xij,Tail).
get_x12(A,B,X1,X2,Tail1,Tail2):-get_xij(B,X2,Tail2),get_xij(A,X1,Tail1).
distance_i(A,B,D,Result):- get_x12(A,B,Xi1,Xi2,Tail1,Tail2),pow(Xi2-Xi1,2,Di),
Dj is D+Di,distance_i(Tail1,Tail2,Dj,Result).
distance_i([],[],D,Result):- Result is sqrt(D).
like(A,B,Result):-distance_i(A,B,0,Result).
get_B([A|Tail],A,Tail).
most_like(A,Lst,Minresult,X):- get_B(Lst,B,Tail),like(A,B,Result),
write(A),write('-'),write(B),write('='),write(Result),write('===>'),write(Tail),nl,
(Minresult > Result -> Minresult1 is Result,X1=B;
Minresult1 is Minresult,X1=X),
most_like(A,Tail,Minresult1,X1).
most_like(A,[],Minresult,X1):-write(A),write('->'),write(X1),nl,write(Minresult),nl.
?- most_like([19,29],[[11,22],[33,44],[55,66],[18,27],[14,27]],1000000,[]).
[19,29]-[11,22]=10.63014581273465===>[[33,44],[55,66],[18,27],[14,27]]
[19,29]-[33,44]=20.518284528683193===>[[55,66],[18,27],[14,27]]
[19,29]-[55,66]=51.62363799656123===>[[18,27],[14,27]]
[19,29]-[18,27]=2.23606797749979===>[[14,27]]
[19,29]-[14,27]=5.385164807134504===>[]
[19,29]->[18,27]
2.23606797749979
true
原理
以下内容来自文心一言的自动生成
一、定义
欧氏距离相似度是一种常用的相似度计算方法,它通过计算两个向量之间的欧氏距离来衡量它们的相似程度。欧氏距离是指在n维空间中两个点之间的距离,即两点之间的直线距离。在相似度计算中,欧氏距离越小,表示两个向量越相似;反之,欧氏距离越大,表示两个向量越不相似。
二、计算
欧氏距离的计算公式为:
d ( x , y ) = ∑ i = 1 n ( x i − y i ) 2 d(x,y) = \sqrt{\sum_{i=1}^{n} (x_i - y_i)^2} d(x,y)=i=1∑n(xi−yi)2
其中, x x x 和 y y y 分别是两个n维向量, x i x_i xi 和 y i y_i yi 分别是向量 x x x 和 y y y 的第 i i i 个元素, n n n
是向量的维度。三、例子
假设有两个二维向量 A = ( 1 , 2 ) A = (1, 2) A=(1,2) 和 B = ( 4 , 6 ) B = (4, 6) B=(4,6),我们需要计算它们之间的欧氏距离。
计算各维度差的平方: ( 1 − 4 ) 2 = 9 , ( 2 − 6 ) 2 = 16 (1-4)^2 = 9, \quad (2-6)^2 = 16 (1−4)2=9,(2−6)2=16
求和: 9 + 16 = 25 9 + 16 = 25 9+16=25
开平方根: 25 = 5 \sqrt{25} = 5 25=5
因此,向量 A A A 和 B B B 之间的欧氏距离为5。
四、例题
例题:给定两个对象,分别用元组(22,1,42,10)和(20,0,36,8)表示,计算这两个对象之间的欧氏距离。
解答:
计算各维度差的平方: ( 22 − 20 ) 2 = 4 , ( 1 − 0 ) 2 = 1 , ( 42 − 36 ) 2 = 36 , ( 10 − 8 ) 2 = 4 (22-20)^2 = 4, \quad (1-0)^2 = 1, \quad (42-36)^2 = 36, \quad (10-8)^2 = 4 (22−20)2=4,(1−0)2=1,(42−36)2=36,(10−8)2=4
求和: 4 + 1 + 36 + 4 = 45 4 + 1 + 36 + 4 = 45 4+1+36+4=45
开平方根: 45 ≈ 6.708 \sqrt{45} \approx 6.708 45≈6.708
因此,这两个对象之间的欧氏距离约为6.708。这个距离值越小,说明两个对象在多维空间中的位置越接近,即它们越相似。
参考文献
1.https://gprolog.org/
2.https://www.swi-prolog.org/
3.文心一言