相似度系数又称为相关系数,常用于考察两个变量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?)2?i=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)2?N∑Y2?(∑Y)2?N∑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<j),同序是指
X
a
,
i
?
X
a
,
j
X{a,i}?X{a,j}
Xa,i?Xa,j和
Y
b
,
i
?
Y
b
,
j
Y{b,i}?Y{b,j}
Yb,i?Yb,j
具有相同的符号。肯德尔 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?1?ififif?(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 是每列的长度。
参考链接: