相关度
皮尔逊相似度
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(xi−xˉ)2∑i=1n(yi−yˉ)2∑i=1n(xi−xˉ)(yi−yˉ)
其中:
- 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 的平均值(即样本均值)。
计算步骤可以归纳为:
- 计算两个变量的平均值。
- 计算每个观测值与平均值的差。
- 计算这些差的乘积的和。
- 计算每个变量差的平方和,并开方得到标准差。
- 将步骤3的结果除以步骤4中两个标准差的乘积,得到皮尔逊相关系数。
- 例子1
以下内容由文心一言的自动生成
例题例题:计算两组数据之间的皮尔逊相关系数。
- 数据集A: 1, 2, 3, 4, 5
- 数据集B: 2, 3, 5, 7, 11
解答:
计算平均值:
- 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
计算差值:
- x i − x ˉ x_i - \bar{x} xi−xˉ 分别为 − 2 , − 1 , 0 , 1 , 2 -2, -1, 0, 1, 2 −2,−1,0,1,2
- y i − y ˉ y_i - \bar{y} yi−yˉ 分别为 − 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
计算协方差:
- ∑ 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(xi−xˉ)(yi−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
计算标准差:
- ∑ 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(xi−xˉ)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(yi−yˉ)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
计算皮尔逊相关系数:
- r = 22 10 × 41.2 ≈ 0.925 r = \frac{22}{\sqrt{10} \times \sqrt{41.2}} \approx 0.925 r=10×41.222≈0.925
因此,数据集A和数据集B之间的皮尔逊相关系数约为0.925,表示两个数据集之间存在很强的正相关关系。
- 例子2
皮尔逊相关系数(Pearson Correlation Coefficient)是衡量两个变量之间线性关系强度和方向的统计量。以下是一个皮尔逊相关系数的具体例子,用于说明其计算和应用。
假设我们有一组学生的数学成绩(X)和物理成绩(Y)的数据,我们想要知道这两个成绩之间是否存在线性关系,以及这种关系的强度和方向。
数据如下:
学生编号 | 数学成绩(X) | 物理成绩(Y) |
---|---|---|
1 | 85 | 92 |
2 | 76 | 83 |
3 | 90 | 95 |
4 | 68 | 72 |
5 | 82 | 88 |
计算步骤:
计算平均值:
- 数学成绩的平均值 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
计算差值(每个观测值与平均值的差):
- 对于数学成绩: X i − X ˉ X_i - \bar{X} Xi−Xˉ
- 对于物理成绩: Y i − Y ˉ Y_i - \bar{Y} Yi−Yˉ
(这里不列出所有差值,仅作为说明)
计算协方差: 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=1∑n(Xi−Xˉ)(Yi−Yˉ)将具体数值代入公式计算协方差(此处略去详细计算过程)。
计算标准差:
- 数学成绩的标准差 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=n1∑i=1n(Xi−Xˉ)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=n1∑i=1n(Yi−Yˉ)2
同样,这里不列出具体计算过程。
计算皮尔逊相关系数: 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 SX≈8
- 假设 S Y ≈ 9 S_Y \approx 9 SY≈9
则皮尔逊相关系数 r ≈ 40 8 × 9 ≈ 0.56 r \approx \frac{40}{8 \times 9} \approx 0.56 r≈8×940≈0.56
解释:
- r ≈ 0.56 r \approx 0.56 r≈0.56 表示数学成绩和物理成绩之间存在正相关关系,但相关程度不是特别强(因为 r r r 值接近0.5,而不是接近1或-1)。
- 这意味着,在一定程度上,数学成绩好的学生往往物理成绩也好,但这种关系不是绝对的,因为还有其他因素可能影响物理成绩。
请注意,上面的协方差、标准差和皮尔逊相关系数都是假设的,实际计算时需要根据给定的数据具体计算。
参考文献
1.https://gprolog.org/
2.https://www.swi-prolog.org/
3.文心一言