欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

变量之间的相关性度量

程序员文章站 2022-07-13 08:54:29
...

1. 相关系数

称为Correlation coefficient,又称皮尔逊相关系数,衡量了两个变量的线性相关程度。定义变量XXYY的协方差Cov(X,Y)Cov(X,Y)
Cov(X,Y)=E{[XE(x)][YE(Y)]}Cov(X,Y)=E\{[X-E(x)][Y-E(Y)]\}
随机变量XXYY的相关系数ρXY\rho_{XY}
ρXY=Cov(X,Y)D(x)D(y)\rho_{XY}=\frac{Cov(X,Y)}{\sqrt{D(x)}\sqrt{D(y)}}

相关系数有如下的性质:
1.ρXY1|\rho_{XY}|\leq 1,ρXY|\rho_{XY}|越大,标明线性相关程度越高,当ρXY=0|\rho_{XY}|=0,表示为不相关。
2.ρXY=1|\rho_{XY}|=1的充要条件是,存在常数a,ba,b使得 P{Y=a+bX}=1P\{Y=a+bX\}=1,即XXYY一定存在线性关系。
3.线性相关和独立的关系:

  • XXYY相互独立时,Cov(X,Y)=0Cov(X,Y)=0,因此ρXY=0|\rho_{XY}|=0,此时XXYY一定不相关。
  • XXYY不相关,XXYY不一定相互独立。因为不相关针对线性关系来说的,相关独立是就一般关系来说的。

1.1相关矩阵

相关系数针对两个随机变量,相关矩阵是对相关系数在nn个随机变量的扩展:(X1,X2,...,Xn)(X_{1},X_{2},...,X_{n}),
R=[ρ11ρ12...ρ1nρ21ρ22...ρ2n............ρn1ρn2...ρnn]R=\begin{bmatrix} \rho_{11} & \rho_{12}&... &\rho_{1n} \\ \rho_{21} & \rho_{22}&... &\rho_{2n} \\ ... & ...&... &... \\ \rho_{n1} & \rho_{n2}&... &\rho_{nn} \\ \end{bmatrix}

2.向量的相似度

当前最常用的衡量向量相似度的是余弦相似度,或者是两者的点积。设两个向量X=[x1,x2,...,xn]TX=[x_{1},x_{2},...,x_{n}]^{T},Y=[y1,y2,...,yn]TY=[y_{1},y_{2},...,y_{n}]^{T},点积也成为了内积(inner product),
XTY=x1y1+x1y1+...+xnynX^{T} Y=x_{1}*y_{1}+x_{1}*y_{1}+...+x_{n}*y_{n}
cos<X,Y>=XTYX Y\cos<X,Y>=\frac{X^{T} Y}{||X||\ ||Y||}

  • 余弦相似度衡量了两个向量的夹角,cos<X,Y>[1,1]\cos<X,Y>\in [-1,1],值越大,标明两个向量夹角越小,相似度越高。
  • 点积,XY=cos<X,Y>X YX\cdot Y=\cos<X,Y>||X||\ ||Y||。点积反映了夹角以及向量的长度因素,在余弦相似度的基础上,两个向量的模越大,相关性越大。点积被用在capsule network时的参数更新计算。

2.1 Gram矩阵

点积运算可以被扩展到3D的feature map,论文:A Gift from Knowledge Distillation:
Fast Optimization, Network Minimization and Transfer Learning中采用Gram矩阵来tranfer的teacher的解过程的流动。
XRH×W×MX\in R^{H\times W\times M},YRH×W×NY\in R^{H\times W\times N},H,WH,W是spatial维度,M,NM,N为channel维度,Gram矩阵GRM×NG\in R^{M\times N}
Gi,j=h=1Hw=1WXh,w,i×Yh,w,jH×WG_{i,j}=\sum_{h=1}^{H}\sum_{w=1}^{W}\frac{X_{h,w,i}\times Y_{h,w,j}}{H\times W}
得到的Gram矩阵相当于抓住了特征图XXYY之间的channel-wise相关度。
实现代码:

import torch

def GramMatrix(A, B):
    """
    Argument:
    A -- matrix of shape (batch_size, n_C,n_H, n_W)

    Returns:
    GA -- Gram matrix of A, of shape (n_C, n_C)
    """
    A_batch_size, A_n_C, A_n_H, A_n_W = A.size()
    B_batch_size, B_n_C, B_n_H, B_n_W = B.size()
    A = A.view(A_batch_size, A_n_C, -1)
    B = B.view(B_batch_size, B_n_C, -1)
    GA = torch.bmm(A, B.transpose(1, 2))
    return GA

x = torch.randn(2, 3, 4, 4)
y = torch.randn(2, 5, 4, 4)

print(GramMatrix(x,y).size())  # torch.Size([2, 3, 5])