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
(为了简洁,分别用f
和a
代替),基于提供的参数。如果两者都提供,则$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
表示贝塞尔校正,即使同时指定了fweights
和aweights
,也会返回无偏估计。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]])