计算数学精解【10】-prolog计算精解(6)

相关度

欧氏距离相似度

  • 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=1n(xiyi)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. 计算各维度差的平方 ( 1 − 4 ) 2 = 9 , ( 2 − 6 ) 2 = 16 (1-4)^2 = 9, \quad (2-6)^2 = 16 (14)2=9,(26)2=16

  2. 求和 9 + 16 = 25 9 + 16 = 25 9+16=25

  3. 开平方根 25 = 5 \sqrt{25} = 5 25 =5

因此,向量 A A A B B B 之间的欧氏距离为5。

四、例题

例题:给定两个对象,分别用元组(22,1,42,10)和(20,0,36,8)表示,计算这两个对象之间的欧氏距离。

解答

  1. 计算各维度差的平方 ( 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 (2220)2=4,(10)2=1,(4236)2=36,(108)2=4

  2. 求和 4 + 1 + 36 + 4 = 45 4 + 1 + 36 + 4 = 45 4+1+36+4=45

  3. 开平方根 45 ≈ 6.708 \sqrt{45} \approx 6.708 45 6.708

因此,这两个对象之间的欧氏距离约为6.708。这个距离值越小,说明两个对象在多维空间中的位置越接近,即它们越相似。

参考文献

1.https://gprolog.org/
2.https://www.swi-prolog.org/
3.文心一言

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值