torch.cov

torch.cov(input, *, correction=1, fweights=None, aweights=None) Tensor

根据input矩阵估算变量的协方差矩阵,其中行代表变量,列代表观测值。

协方差矩阵是一个方形矩阵,其中包含每对变量的协方差。对角线上的元素表示每个变量自身的方差。根据定义,如果 input 表示单个变量(标量或一维)时,则返回该变量的方差。

变量$x$$y$的样本协方差如下所示:

$\text{cov}(x,y) = \frac{\sum^{N}_{i = 1}(x_{i} - \bar{x})(y_{i} - \bar{y})}{\max(0,~N~-~\delta N)}$

其中,$\bar{x}$$\bar{y}$ 分别表示$x$$y$的简单平均值,而$\delta N$ 表示correction

如果提供了fweights和/或aweights,将计算加权协方差,其公式如下:

$\text{cov}_w(x,y) = \frac{\sum^{N}_{i = 1}w_i(x_{i} - \mu_x^*)(y_{i} - \mu_y^*)} {\max(0,~\sum^{N}_{i = 1}w_i~-~\frac{\sum^{N}_{i = 1}w_ia_i}{\sum^{N}_{i = 1}w_i}~\delta N)}$

其中,$w$ 表示 fweights 或者 aweights(为了简洁,分别用 fa 代替),基于提供的参数。如果两者都提供,则$w = f \times a$。加权平均值为$\mu_x^* = \frac{\sum^{N}_{i = 1}w_ix_{i}}{\sum^{N}_{i = 1}w_i}$。如果没有提供 f 和/或 a,则可以将其视为适当大小的$\mathbb{1}$ 向量。

参数

输入 (Tensor) – 一个包含多个变量和观测值的二维矩阵,或者是一个代表单个变量的标量或一维向量。

关键字参数
  • correction (int, 可选) – 样本大小和样本自由度之间的差值。默认情况下,correction = 1 表示贝塞尔校正,即使同时指定了 fweightsaweights,也会返回无偏估计。correction = 0 将返回简单平均值。默认值为 1

  • fweights (tensor, 可选) – 表示每个观察值应重复次数的标量或1D张量。其元素数量必须与input的列数相等,并且数据类型必须为整型。如果未指定,则默认为None

  • aweights (tensor, 可选) – 观测向量的权重,可以是标量或1D数组。这些相对权重通常对于被认为“重要”的观测值较大,而对于不太重要的观测值较小。其元素数量必须与input的列数相等,并且需要具有浮点数据类型。如果设置为None则会被忽略,默认情况下为None

返回值

(张量)变量之间的协方差矩阵。

参见

torch.corrcoef() 返回归一化的协方差矩阵。

示例:
>>> x = torch.tensor([[0, 2], [1, 1], [2, 0]]).T
>>> x
tensor([[0, 1, 2],
        [2, 1, 0]])
>>> torch.cov(x)
tensor([[ 1., -1.],
        [-1.,  1.]])
>>> torch.cov(x, correction=0)
tensor([[ 0.6667, -0.6667],
        [-0.6667,  0.6667]])
>>> fw = torch.randint(1, 10, (3,))
>>> fw
tensor([1, 6, 9])
>>> aw = torch.rand(3)
>>> aw
tensor([0.4282, 0.0255, 0.4144])
>>> torch.cov(x, fweights=fw, aweights=aw)
tensor([[ 0.4169, -0.4169],
        [-0.4169,  0.4169]])
本页目录