相似度系数又称为相关系数,常用于考察两个变量x、y之间的相关程度。
matlab中,有corr
和corr2
函数计算相似度系数,并提供了3种相关系数的计算方法:
皮尔逊线性相关系数是最常用的线性相关系数,皮尔逊线性相关系数 rho(a,b) 定义为:
r h o ( a , b ) = ∑ i = 1 n ( X a , i − X ‾ a ) ( Y b , i − Y ‾ b ) ∑ i = 1 n ( X a , i − X ‾ a ) 2 ∑ j = 1 n ( Y b , j − Y ‾ b ) 2 rho(a,b)=\frac{\sum\limits_{i=1}^n{(X_{a,i}-\overline{X}_a)(Y_{b,i}-\overline{Y}_b)}}{\sqrt{\sum\limits_{i=1}^n{(X_{a,i}-\overline{X}_a)}^2\sum\limits_{j=1}^n{(Y_{b,j}-\overline{Y}_b)}^2}}\\ rho(a,b)=i=1∑n(Xa,i−Xa)2j=1∑n(Yb,j−Yb)2i=1∑n(Xa,i−Xa)(Yb,i−Yb)
其中 n 为每个列的长度,相关系数的值的范围是从 –1 到 +1。值 –1 表示完全负相关,而值 +1 表示完全正相关。值 0 表示列之间没有相关性。
四种等效表达式:
ρ X , Y = ∑ ( X − X ‾ ) ( Y − Y ‾ ) ∑ ( X − X ‾ ) 2 ∑ ( Y − Y ‾ ) 2 ρ X , Y = E ( X Y ) − E ( X ) E ( Y ) E ( X 2 ) − E 2 ( X ) E ( Y 2 ) − E 2 ( Y ) ρ X , Y = N ∑ X Y − ∑ X ∑ Y N ∑ X 2 − ( ∑ X ) 2 N ∑ Y 2 − ( ∑ Y ) 2 ρ X , Y = ∑ X Y − ∑ X ∑ Y / N ∑ X 2 − ( ∑ X ) 2 / N ∑ Y 2 ( ∑ Y ) 2 / N \rho_{X,Y}=\frac{\sum\left(X-\overline{X}\right)(Y-\overline{Y})}{\sqrt{\sum\left(X-\overline{X}\right)^{2}\sum{(Y-\overline{Y})^{2}}}}\\ \\[1cm] \rho_{X,Y}=\frac{E(XY)-E(X)E(Y)}{\sqrt{E(X^2)-E^2(X)\sqrt{E(Y^2)-E^2(Y)}}} \\[1cm] \rho_{X,Y}=\frac{N\sum XY-\sum X\sum Y}{\sqrt{N\sum X^2-(\sum X)^2}\sqrt{N\sum Y^2-(\sum Y)^2}} \\[1cm] \rho_{X,Y}=\frac{\sum XY-\sum X\sum Y/N}{\sqrt{\sum X^2-(\sum X)^2/N}\sqrt{\sum Y^2(\sum Y)^2/N}} ρX,Y=∑(X−X)2∑(Y−Y)2∑(X−X)(Y−Y)ρX,Y=E(X2)−E2(X)E(Y2)−E2(Y)E(XY)−E(X)E(Y)ρX,Y=N∑X2−(∑X)2N∑Y2−(∑Y)2N∑XY−∑X∑YρX,Y=∑X2−(∑X)2/N∑Y2(∑Y)2/N∑XY−∑X∑Y/N
测试案例:
clear,clc,close all
t = 0:0.01:1;
x = sin(2*pi*t)+2;
y = 0.95*sin(2*pi*t*0.9)+0.05*sin(2*pi*t)+2;
plot(x)
hold on
plot(y)
corr1 = corr(x',y')
corr2 = corr2(x,y)
corr3 = corr_self(x,y)
function r = corr_self(x,y)
len = length(x);
x_ = mean(x);
y_ = mean(y);
sum1 = 0;
sum2 = 0;
sum3 = 0;
for i = 1:len
sum1 = sum1 + (x(i)-x_)*(y(i)-y_);
sum2 = sum2 + (x(i)-x_)^2;
sum3 = sum3 + (y(i)-y_)^2;
end
r = sum1 / sqrt(sum2*sum3);
end
肯德尔 tau 基于 (i,j) 同序对的计数(其中 i
具有相同的符号。肯德尔 tau 方程包括对归一化常量中结值的调整项,通常称为 tau-b。
对于矩阵 X 中的 Xa 列和矩阵 Y 中的 Yb 列,肯德尔 tau 系数定义为:
r h o ( a , b ) = 1 − 6 ∑ d 2 n ( n 2 − 1 ) rho(a,b)=1-\frac{6\sum d^{2}}{n(n^{2}-1)} rho(a,b)=1−n(n2−1)6∑d2
其中, K = ∑ i = 1 n − 1 ∑ j = i + 1 n ξ ∗ ( X a , i , X a , j , Y b , i , Y b , j ) K=\sum_{i=1}^{n-1}\sum_{j=i+1}^{n}\xi^*(X_{a,i},X_{a,j},Y_{b,i},Y_{b,j}) K=∑i=1n−1∑j=i+1nξ∗(Xa,i,Xa,j,Yb,i,Yb,j),并且有:
ξ ∗ k ( X a , i , X a , j , Y b , i , Y b , j ) = { 1 if ( X a , i − X a , j ) ( Y b , i − Y b , j ) > 0 0 if ( X a , i − X a , j ) ( Y b , i − Y b , j ) = 0 − 1 if ( X a , i − X a , j ) ( Y b , i − Y b , j ) < 0 \left.\xi^{*k}(X_{a,i},X_{a,j},Y_{b,i},Y_{b,j})=\left\{\begin{array}{lll}1&\text{if}&(X_{a,i}-X_{a,j})(Y_{b,i}-Y_{b,j})>0\\0&\text{if}&(X_{a,i}-X_{a,j})(Y_{b,i}-Y_{b,j})=0\\-1&\text{if}&(X_{a,i}-X_{a,j})(Y_{b,i}-Y_{b,j})<0\end{array}\right.\right. ξ∗k(Xa,i,Xa,j,Yb,i,Yb,j)=⎩ ⎨ ⎧10−1ififif(Xa,i−Xa,j)(Yb,i−Yb,j)>0(Xa,i−Xa,j)(Yb,i−Yb,j)=0(Xa,i−Xa,j)(Yb,i−Yb,j)<0
斯皮尔曼 rho 等效于应用于 Xa 和 Yb 列的秩序的 皮尔逊线性相关系数。
如果每个列中的所有秩都不同,该方程可简化为:
r h o ( a , b ) = 1 − 6 ∑ d 2 n ( n 2 − 1 ) rho(a,b)=1-\frac{6\sum d^{2}}{n(n^{2}-1)} rho(a,b)=1−n(n2−1)6∑d2
其中,d 是两个列的秩之差,n 是每列的长度。
参考链接: