计算数学精解【11】-prolog计算精解(7)

相关度

皮尔逊相似度

get_xij([Xij|Tail],Xij,Tail).
get_x12(A,B,X1,X2,Tail1,Tail2):-get_xij(B,X2,Tail2),get_xij(A,X1,Tail1).

%get_sum
get_sum(A,B,SA,SB,RA,RB):- get_xij(A,Ai,TailA),get_xij(B,Bi,TailB),SA1 is SA+Ai,SB1 is SB+Bi,
get_sum(TailA,TailB,SA1,SB1,RA,RB).
get_sum([],[],SA,SB,RA,RB):- RA is SA,RB is SB.

%get_mean
get_mean(A,B,MA,MB):- length(A,NA),length(B,NB),get_sum(A,B,0,0,SA,SB),
MA is SA/NA,MB is SB/NB.

%get_cha
get_cha(A,B,MA,MB,ChaALst,ChaBLst,ChaAL,ChaBL):- get_xij(A,Ai,TailA),get_xij(B,Bi,TailB),
ChaA is Ai-MA,ChaB is Bi-MB,
append(ChaALst, [ChaA], ChaALst1),append(ChaBLst, [ChaB], ChaBLst1),
get_cha(TailA,TailB,MA,MB,ChaALst1,ChaBLst1,ChaAL,ChaBL).
get_cha([],[],_,_,ChaALst,ChaBLst,ChaAL,ChaBL):- ChaAL=ChaALst,ChaBL=ChaBLst.

%get_chachensum
get_chachensum(ChaALst,ChaBLst,S,RS):- get_xij(ChaALst,Ai,TailA),get_xij(ChaBLst,Bi,TailB),
S1 is S+Ai*Bi,
get_chachensum(TailA,TailB,S1,RS).
get_chachensum([],[],S,RS):- RS is S.

get_SCha(ChaALst,ChaBLst,ChaSA,ChaSB,RChaA,RChaB):- get_xij(ChaALst,Ai,TailA),get_xij(ChaBLst,Bi,TailB),
pow(Ai,2,SA1),SA2 is ChaSA+SA1,
pow(Bi,2,SB1),SB2 is ChaSB+SB1,
get_SCha(TailA,TailB,SA2,SB2,RChaA,RChaB).
get_SCha([],[],ChaSA,ChaSB,RChaA,RChaB):- RChaA is ChaSA,RChaB is ChaSB.

get_xiefangcha(ChaALst,ChaBLst,Xiefangcha):- get_chachensum(ChaALst,ChaBLst,0,ChaS),
length(ChaALst,NA),Xiefangcha is ChaS/NA.


get_SCha_Result(ChaALst,ChaBLst,ResultA,ResultB):-get_SCha(ChaALst,ChaBLst,0,0,ChaSA,ChaSB),length(ChaALst,NA),
sqrt(ChaSA/NA,ResultA),sqrt(ChaSB/NA,ResultB).

get_r(A,B,Result):- get_mean(A,B,MA,MB),
get_cha(A,B,MA,MB,[],[],ChaAL,ChaBL),
get_xiefangcha(ChaAL,ChaBL,Xiefangcha),
get_SCha_Result(ChaAL,ChaBL,ResultA,ResultB),
Result is Xiefangcha/(ResultA*ResultB).


like(A,B,Rsabs,Result):-get_r(A,B,Result),abs(Result,Rsabs).

get_B([A|Tail],A,Tail).

most_like(A,Lst,Maxresult,X):- get_B(Lst,B,Tail),like(A,B,Result,Rs),
write(A),write('-'),write(B),write('='),write(Result),write('#'),write(Rs),write('===>'),write(Tail),nl,
(Maxresult < Result -> Maxresult1 is Result,X1=B; 
Maxresult1 is Maxresult,X1=X),
most_like(A,Tail,Maxresult1,X1).

most_like(A,[],Maxresult,X1):-write(A),write('->'),write(X1),nl,write(Maxresult),nl.
?- 
|    load('e:/learn/learn.pro').
Correct to: "win_menu:load('e:/learn/learn.pro')"? 
Please answer 'y' or 'n'? yes
true.

?- most_like([19,29,103],[[17,22,209],[-33,-24,41],[55,62,9],[8,32,11],[42,27,98]],0,[]).
[19,29,103]-[17,22,209]=0.9962749150530827#0.9962749150530827===>[[-33,-24,41],[55,62,9],[8,32,11],[42,27,98]]
[19,29,103]-[-33,-24,41]=0.9999968923498329#0.9999968923498329===>[[55,62,9],[8,32,11],[42,27,98]]
[19,29,103]-[55,62,9]=0.9734267352449261#-0.9734267352449261===>[[8,32,11],[42,27,98]]
[19,29,103]-[8,32,11]=0.29499508345624664#-0.29499508345624664===>[[42,27,98]]
[19,29,103]-[42,27,98]=0.9520353184598399#0.9520353184598399===>[]
[19,29,103]->[-33,-24,41]
0.9999968923498329
true .

原理

皮尔逊相似度,在更严谨的学术表述中,通常被称为皮尔逊相关系数(Pearson Correlation Coefficient),是衡量两个变量之间线性相关程度的一个统计指标。它的值域为[-1, 1],其中1表示完全正相关,-1表示完全负相关,0表示没有线性相关关系。以下是对皮尔逊相似度(皮尔逊相关系数)的定义、计算和例题的详细解答。

一、定义

皮尔逊相关系数 r r r 是用来衡量两个变量 X X X Y Y Y 之间线性关系强度和方向的统计量。其计算公式基于两个变量的协方差和它们各自的标准差。

二、计算

皮尔逊相关系数的计算公式为:

r = ∑ i = 1 n ( x i − x ˉ ) ( y i − y ˉ ) ∑ i = 1 n ( x i − x ˉ ) 2 ∑ i = 1 n ( y i − y ˉ ) 2 r = \frac{\sum_{i=1}^{n} (x_i - \bar{x})(y_i - \bar{y})}{\sqrt{\sum_{i=1}^{n} (x_i - \bar{x})^2} \sqrt{\sum_{i=1}^{n} (y_i - \bar{y})^2}} r=i=1n(xixˉ)2 i=1n(yiyˉ)2 i=1n(xixˉ)(yiyˉ)

其中:

  • n n n 是观测值的数量。
  • x i x_i xi y i y_i yi 分别是两个变量在第 i i i 个观测值上的取值。
  • x ˉ \bar{x} xˉ y ˉ \bar{y} yˉ 分别是 x x x y y y 的平均值(即样本均值)。

计算步骤可以归纳为:

  1. 计算两个变量的平均值。
  2. 计算每个观测值与平均值的差。
  3. 计算这些差的乘积的和。
  4. 计算每个变量差的平方和,并开方得到标准差。
  5. 将步骤3的结果除以步骤4中两个标准差的乘积,得到皮尔逊相关系数。
  • 例子1

以下内容由文心一言的自动生成
例题

例题:计算两组数据之间的皮尔逊相关系数。

  • 数据集A: 1, 2, 3, 4, 5
  • 数据集B: 2, 3, 5, 7, 11

解答

  1. 计算平均值

    • x ˉ = 1 + 2 + 3 + 4 + 5 5 = 3 \bar{x} = \frac{1+2+3+4+5}{5} = 3 xˉ=51+2+3+4+5=3
    • y ˉ = 2 + 3 + 5 + 7 + 11 5 = 5.6 \bar{y} = \frac{2+3+5+7+11}{5} = 5.6 yˉ=52+3+5+7+11=5.6
  2. 计算差值

    • x i − x ˉ x_i - \bar{x} xixˉ 分别为 − 2 , − 1 , 0 , 1 , 2 -2, -1, 0, 1, 2 2,1,0,1,2
    • y i − y ˉ y_i - \bar{y} yiyˉ 分别为 − 3.6 , − 2.6 , − 0.6 , 1.4 , 5.4 -3.6, -2.6, -0.6, 1.4, 5.4 3.6,2.6,0.6,1.4,5.4
  3. 计算协方差

    • ∑ i = 1 5 ( x i − x ˉ ) ( y i − y ˉ ) = ( − 2 × − 3.6 ) + ( − 1 × − 2.6 ) + ( 0 × − 0.6 ) + ( 1 × 1.4 ) + ( 2 × 5.4 ) = 7.2 + 2.6 + 0 + 1.4 + 10.8 = 22 \sum_{i=1}^{5} (x_i - \bar{x})(y_i - \bar{y}) = (-2 \times -3.6) + (-1 \times -2.6) + (0 \times -0.6) + (1 \times 1.4) + (2 \times 5.4) = 7.2 + 2.6 + 0 + 1.4 + 10.8 = 22 i=15(xixˉ)(yiyˉ)=(2×3.6)+(1×2.6)+(0×0.6)+(1×1.4)+(2×5.4)=7.2+2.6+0+1.4+10.8=22
  4. 计算标准差

    • ∑ i = 1 5 ( x i − x ˉ ) 2 = ( − 2 ) 2 + ( − 1 ) 2 + 0 2 + 1 2 + 2 2 = 4 + 1 + 0 + 1 + 4 = 10 \sqrt{\sum_{i=1}^{5} (x_i - \bar{x})^2} = \sqrt{(-2)^2 + (-1)^2 + 0^2 + 1^2 + 2^2} = \sqrt{4 + 1 + 0 + 1 + 4} = \sqrt{10} i=15(xixˉ)2 =(2)2+(1)2+02+12+22 =4+1+0+1+4 =10
    • ∑ i = 1 5 ( y i − y ˉ ) 2 = ( − 3.6 ) 2 + ( − 2.6 ) 2 + ( − 0.6 ) 2 + 1. 4 2 + 5. 4 2 = 12.96 + 6.76 + 0.36 + 1.96 + 29.16 = 41.2 \sqrt{\sum_{i=1}^{5} (y_i - \bar{y})^2} = \sqrt{(-3.6)^2 + (-2.6)^2 + (-0.6)^2 + 1.4^2 + 5.4^2} = \sqrt{12.96 + 6.76 + 0.36 + 1.96 + 29.16} = \sqrt{41.2} i=15(yiyˉ)2 =(3.6)2+(2.6)2+(0.6)2+1.42+5.42 =12.96+6.76+0.36+1.96+29.16 =41.2
  5. 计算皮尔逊相关系数

    • r = 22 10 × 41.2 ≈ 0.925 r = \frac{22}{\sqrt{10} \times \sqrt{41.2}} \approx 0.925 r=10 ×41.2 220.925

因此,数据集A和数据集B之间的皮尔逊相关系数约为0.925,表示两个数据集之间存在很强的正相关关系。

  • 例子2

皮尔逊相关系数(Pearson Correlation Coefficient)是衡量两个变量之间线性关系强度和方向的统计量。以下是一个皮尔逊相关系数的具体例子,用于说明其计算和应用。

假设我们有一组学生的数学成绩(X)和物理成绩(Y)的数据,我们想要知道这两个成绩之间是否存在线性关系,以及这种关系的强度和方向。

数据如下

学生编号数学成绩(X)物理成绩(Y)
18592
27683
39095
46872
58288

计算步骤

  1. 计算平均值

    • 数学成绩的平均值 X ˉ = 85 + 76 + 90 + 68 + 82 5 = 80.2 \bar{X} = \frac{85 + 76 + 90 + 68 + 82}{5} = 80.2 Xˉ=585+76+90+68+82=80.2
    • 物理成绩的平均值 Y ˉ = 92 + 83 + 95 + 72 + 88 5 = 86 \bar{Y} = \frac{92 + 83 + 95 + 72 + 88}{5} = 86 Yˉ=592+83+95+72+88=86
  2. 计算差值(每个观测值与平均值的差):

    • 对于数学成绩: X i − X ˉ X_i - \bar{X} XiXˉ
    • 对于物理成绩: Y i − Y ˉ Y_i - \bar{Y} YiYˉ

    (这里不列出所有差值,仅作为说明)

  3. 计算协方差 Cov ( X , Y ) = 1 n ∑ i = 1 n ( X i − X ˉ ) ( Y i − Y ˉ ) \text{Cov}(X, Y) = \frac{1}{n} \sum_{i=1}^{n} (X_i - \bar{X})(Y_i - \bar{Y}) Cov(X,Y)=n1i=1n(XiXˉ)(YiYˉ)将具体数值代入公式计算协方差(此处略去详细计算过程)。

  4. 计算标准差

    • 数学成绩的标准差 S X = 1 n ∑ i = 1 n ( X i − X ˉ ) 2 S_X = \sqrt{\frac{1}{n} \sum_{i=1}^{n} (X_i - \bar{X})^2} SX=n1i=1n(XiXˉ)2
    • 物理成绩的标准差 S Y = 1 n ∑ i = 1 n ( Y i − Y ˉ ) 2 S_Y = \sqrt{\frac{1}{n} \sum_{i=1}^{n} (Y_i - \bar{Y})^2} SY=n1i=1n(YiYˉ)2

    同样,这里不列出具体计算过程。

  5. 计算皮尔逊相关系数 r = Cov ( X , Y ) S X S Y r = \frac{\text{Cov}(X, Y)}{S_X S_Y} r=SXSYCov(X,Y)

    假设我们已经计算出了协方差和两个标准差的具体值,现在将它们代入公式得到皮尔逊相关系数 r r r

假设结果(因为实际计算过程未展示,这里给出一个假设的结果):

  • 假设 Cov ( X , Y ) ≈ 40 \text{Cov}(X, Y) \approx 40 Cov(X,Y)40
  • 假设 S X ≈ 8 S_X \approx 8 SX8
  • 假设 S Y ≈ 9 S_Y \approx 9 SY9

则皮尔逊相关系数 r ≈ 40 8 × 9 ≈ 0.56 r \approx \frac{40}{8 \times 9} \approx 0.56 r8×9400.56

解释

  • r ≈ 0.56 r \approx 0.56 r0.56 表示数学成绩和物理成绩之间存在正相关关系,但相关程度不是特别强(因为 r r r 值接近0.5,而不是接近1或-1)。
  • 这意味着,在一定程度上,数学成绩好的学生往往物理成绩也好,但这种关系不是绝对的,因为还有其他因素可能影响物理成绩。

请注意,上面的协方差、标准差和皮尔逊相关系数都是假设的,实际计算时需要根据给定的数据具体计算。

参考文献

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值