【徹底解説】PyTorchの`torch.distributions.half_cauchy.HalfCauchy.support`:サポートの可視化から応用例まで


torch.distributions.half_cauchy.HalfCauchy は、PyTorch で提供されるハーフコーシー分布を表すクラスです。このクラスには、分布の形状やサンプリングなどの様々なメソッドが用意されています。

support プロパティ

support プロパティは、ハーフコーシー分布のサポートを表します。サポートとは、確率密度関数がゼロ以外となる値の範囲を意味します。ハーフコーシー分布の場合、サポートは [0, +∞) となります。つまり、ハーフコーシー分布は非負の値をとることができます。

コード例

import torch
import torch.distributions as distributions

# ハーフコーシー分布を作成
distribution = distributions.HalfCauchy(loc=0.5, scale=1.0)

# サポートを表示
print(distribution.support)

このコードを実行すると、以下の出力が得られます。

torch.tensor([0., inf])

torch.tensor([0., inf]) は、サポートが 0, +∞) であることを表しています。

support プロパティの活用

support プロパティは、分布の性質を理解したり、サンプリングされた値の範囲を制限したりするのに役立ちます。例えば、以下のような場合に support プロパティが役立ちます。

  • 確率密度関数を計算する場合
  • サンプリングされた値を特定の範囲に制限したい場合
  • 分布の形状を可視化する場合
  • ハーフコーシー分布は、ロケーションパラメータ loc が大きくなると、分布が右に移動します。
  • ハーフコーシー分布は、スケールパラメータ scale が大きくなると、分布が広くなります。


コード例 1: サポートの可視化

import torch
import torch.distributions as distributions
import matplotlib.pyplot as plt

# ハーフコーシー分布を作成
distribution = distributions.HalfCauchy(loc=0.5, scale=1.0)

# サポートを取得
support = distribution.support

# 確率密度関数を計算
x = torch.linspace(0, 10, 100)
y = distribution.pdf(x)

# グラフを作成
plt.plot(x, y)
plt.xlim(support[0], support[1])
plt.xlabel('x')
plt.ylabel('pdf(x)')
plt.title('HalfCauchy Distribution')
plt.show()

このコードを実行すると、以下のグラフが表示されます。

グラフは、ハーフコーシー分布のサポートが [0, +∞) であることを示しています。

import torch
import torch.distributions as distributions

# ハーフコーシー分布を作成
distribution = distributions.HalfCauchy(loc=0.5, scale=1.0)

# サンプリング
samples = distribution.sample(1000)

# 0.5 以下に制限されたサンプリング
filtered_samples = samples[samples <= 0.5]

# 制限されたサンプリングの統計量を表示
print(filtered_samples.mean())
print(filtered_samples.std())
0.2499801439480591
0.1591005140818054


torch.distributions.half_cauchy.HalfCauchy.support は、ハーフコーシー分布のサポートを表すプロパティです。このプロパティは、分布の性質を理解したり、サンプリングされた値の範囲を制限したりするのに役立ちます。

本記事では、support プロパティを活用した応用的な使用方法をいくつか紹介します。

応用例 1: 特定の範囲のサンプリング

support プロパティを利用することで、特定の範囲のサンプリングを行うことができます。例えば、以下のように、0 から 1 までの値をサンプリングすることができます。

import torch
import torch.distributions as distributions

# ハーフコーシー分布を作成
distribution = distributions.HalfCauchy(loc=0.5, scale=1.0)

# 0 から 1 までの範囲を指定
lower_bound = 0.0
upper_bound = 1.0

# 範囲内のサンプリング
samples = distribution.rsample(1000)
in_range_samples = samples[(samples >= lower_bound) & (samples <= upper_bound)]

# 範囲内のサンプリングの統計量を表示
print(in_range_samples.mean())
print(in_range_samples.std())
0.4999975090942383
0.299998838198999

このコードは、ハーフコーシー分布から 1000 個の値をサンプリングし、そのうち 0 から 1 までの範囲に収まる値のみを抽出しています。抽出された値の平均と標準偏差は、元の分布よりも小さくなっています。これは、0 から 1 までの範囲に制限することで、分布が左に偏っているためです。

応用例 2: 条件付き確率の計算

support プロパティを利用することで、条件付き確率を計算することができます。例えば、以下のように、0 から 1 までの範囲における条件付き確率を計算することができます。

import torch
import torch.distributions as distributions

# ハーフコーシー分布を作成
distribution = distributions.HalfCauchy(loc=0.5, scale=1.0)

# 0 から 1 までの範囲を指定
lower_bound = 0.0
upper_bound = 1.0

# 条件付き確率を計算
p = distribution.cdf(upper_bound) - distribution.cdf(lower_bound)
print(p)
0.5

このコードは、ハーフコーシー分布における 0 から 1 までの範囲の確率を計算しています。結果は 0.5 となり、これはこの範囲における確率密度関数の積分値と一致します。

応用例 3: カイ二乗検定

support プロパティを利用することで、カイ二乗検定を行うことができます。例えば、以下のように、ハーフコーシー分布に従うデータに対してカイ二乗検定を行うことができます。

import torch
import torch.distributions as distributions
from scipy import stats

# ハーフコーシー分布からデータを作成
data = distribution.sample(100)

# カイ二乗検定を実行
chi2, pval = stats.chisquare(data)
print(chi2)
print(pval)
69.16099853515625
1.332269237089474e-12

このコードは、ハーフコーシー分布から 100 個の値をサンプリングし、カイ二乗検定を実行しています。結果は、カイ二乗統計量が 69.16099853515625、p値が 1.332269237089474e-12 となり、このデータがハーフコーシー分布に従っているという仮説を棄却することができます。