【PyTorch】Tensorの統計量、平均、分散、標準偏差について

ふゅか
ふゅか
今回はテンソル操作の統計量についてだね。合計とか平均とか、意外と簡単に計算できるんだよ♪
はるか
はるか
そう、sum()とかmean()を使うだけでいい。特に次元ごとの操作は便利。

1. 統計量の計算

テンソル操作を行う際には、合計、平均、分散など、さまざまな統計量を計算することがよくあります。ここでは、PyTorchの便利なメソッドを使ってこれらの統計量を計算する方法を紹介します。

2. 合計

テンソルの全要素の合計を計算するには、sum()メソッドを使います。以下の例で見てみましょう。

import torch
tensor = torch.tensor([[1, 3],[3, 7]])
# 合計
sum_value = tensor.sum()
print(sum_value) 

上記のコードでは、テンソル tensor の全要素を合計しています。sum() メソッドを使うだけで、合計を簡単に求められます。

3. 平均

PyTorchではtorch.mean()関数を使ってテンソルの平均を計算できます。

3.1. 使用例

data = torch.tensor([1.0, 2.0, 3.0, 4.0, 5.0])

# 平均を計算
mean_value = torch.mean(data)
print(mean_value)  # 出力: tensor(3.)

ここではdataの全要素の平均が計算されます。

3.2. 次元ごとの平均

多次元のテンソルで特定の次元ごとの平均を計算する場合は、dim引数を使います。

# 2次元テンソル
data_2d = torch.tensor([[1.0, 2.0], [3.0, 4.0],[5,6]])

# 列ごとの平均を計算 (dim=0)
mean_value_dim0 = torch.mean(data_2d, dim=0)
print(mean_value_dim1) 
# 行ごとの平均を計算 (dim=1)
mean_value_dim1 = torch.mean(data_2d, dim=1)
print(mean_value_dim1)

この場合、各列と各行ごとの平均を計算しています。

4. 分散

分散はデータの広がりを示す統計量です。torch.var()関数を使うことで、テンソルの分散を計算できます。

ふゅか
ふゅか
分散も大事な統計量だよね。
はるか
はるか
不偏分散がデフォルトだけど、母分散も計算可能。unbiased引数を変えればいい。

4.1. 使用例

# 分散を計算
data = torch.tensor([1.0, 2.0, 3.0, 4.0, 5.0])
variance_value = torch.var(data)
print(variance_value) 

データ全体の分散が計算され、これはデータが平均からどの程度離れているかを示します。

4.2. unbiased

PyTorchのtorch.var()はデフォルトで不偏分散(自由度 = N-1)を計算しますが、unbiased引数をFalseに設定すると母分散(自由度 = N)を計算できます。

# 分散を計算
data = torch.tensor([1.0, 2.0, 3.0, 4.0, 5.0])
variance_value = torch.var(data,unbiased=False)
print(variance_value) 

4.3. 次元ごとの分散

特定の次元ごとの分散を計算する場合も、dim引数を使います。

data_2d = torch.tensor([[1.0, 2.0], [3.0, 4.0],[5,6]])
# 列ごとの分散を計算 (dim=0)
variance_value_dim0 = torch.var(data_2d, dim=0)
print(variance_value_dim0)
# 行ごとの分散を計算 (dim=1)
variance_value_dim1 = torch.var(data_2d, dim=1)
print(variance_value_dim1)

この場合、各列と各行ごとの平均を計算しています。

 

5. 標準偏差

標準偏差は分散の平方根であり、データの広がりを直感的に理解するのに役立ちます。

5.1. 使用例

# 標準偏差を計算
data = torch.tensor([1.0, 2.0, 3.0, 4.0, 5.0])
std_value = torch.std(data)
print(std_value)

分散の平方根としての標準偏差が計算されます。

5.2. unbiased

PyTorchのtorch.std()はデフォルトで不偏分散(自由度 = N-1)を計算しますが、unbiased引数をFalseに設定すると母分散(自由度 = N)を計算できます。

# 分散を計算
data = torch.tensor([1.0, 2.0, 3.0, 4.0, 5.0])
variance_value = torch.std(data,unbiased=False)
print(variance_value) 

5.3. 次元ごとの標準偏差

次元ごとの標準偏差も同様に計算できます。

data_2d = torch.tensor([[1.0, 2.0], [3.0, 4.0],[5,6]])
# 列ごとの分散を計算 (dim=0)
std_value_dim0 = torch.std(data_2d, dim=0)
print(std_value_dim0)
# 行ごとの標準偏差を計算 (dim=1)
std_value_dim1 = torch.std(data_2d, dim=1)
print(std_value_dim1)

各行の標準偏差を計算することで、行内のデータの広がりが分かります。

6. 最大値と最小値

ふゅか
ふゅか
最後に最大値と最小値!max()やmin()で値とその位置が取れるから、どこが最大かすぐわかるよ☆
はるか
はるか
インデックスも一緒に取れるのが便利。

6.1. 最大値

テンソルの最大値と、その最大値がどの位置にあるのか(インデックス)を取得するには max()メソッドを使います。

tensor = torch.tensor([1, 2,3,4,5 ])
# 最大値とそのインデックス
max_value, max_index = tensor.max(dim=0)

print(max_value)
print(max_index)

6.2. 最小値

テンソルの最小値と、その最小値がどの位置にあるのか(インデックス)を取得するには min()メソッドを使います。

# 最大値とそのインデックス
min_value, min_index = tensor.min(dim=0)

print(min_value)
print(min_index)