標本分散
ここではNumPyとPyTorchを用いて標本分散を求める手法について示す。
データ$ x =\{x_1,x_2,\ldots,x_N\}, データの平均値$ \bar{x}、データの個数$ Nとする。
NumPyを用いる例
code:var_sample_np01.py
import numpy as np
x = np.array(50, 50, 80, 70, 90)
# 定義通り
S1 = np.sum((x - np.mean(x))**2)/x.shape0
print('by definition :', S1)
# var
S2 = np.var(x)
print('var :', S2)
# cov
S3 = np.cov(x, bias=True)
print('cov :', S3)
covは共分散行列を求めるための関数であるが、データ列を一つだけ渡すことで分散を求めることができる。デフォルトでは不偏分散を求めるので、名前付き引数biasを設定することで標本分散を求めることができる。
PyTorchを用いる例
code:var_sample_pt01.py
import torch as pt
x = pt.tensor(50, 50, 80, 70, 90, dtype=pt.float)
# 定義通り
S1 = pt.sum((x - pt.mean(x))**2)/x.shape0
print('by definition :', S1)
# var
S2 = pt.var(x, correction=0)
print('var :', S2)
# cov
S3 = pt.cov(x, correction=0)
print('cov :', S3)
PyTorchが提供するvarとcovは、デフォルトで不偏分散を求めるようになっている。そのため、名前付き引数(correction=0)とすることで明示的にDelta Degrees of Freedomの値を設定する必要があることに注意。
関連:
2024.4.1 分散・共分散
不偏分散