確率分布モジュール:torch.distributions.negative_binomial.NegativeBinomial.log_prob()

2024-04-02

今回の記事では、torch.distributions.negative_binomial.NegativeBinomial.log_prob() 関数について詳細に解説します。この関数は、負の二項分布に従う確率変数の対数確率密度関数を計算します。

負の二項分布は、2つのパラメータ total_countprobs で定義される離散確率分布です。

  • total_count は、成功までの試行回数の上限を表します。
  • probs は、1回の試行で成功する確率を表します。

負の二項分布は、以下のような場面で利用されます。

  • ある事象が成功するまで何回試行する必要があるかをモデル化する
  • ポアソン分布の過分散を考慮する

torch.distributions.negative_binomial.NegativeBinomial.log_prob() 関数は、負の二項分布に従う確率変数の対数確率密度関数を計算します。

関数定義

torch.distributions.negative_binomial.NegativeBinomial.log_prob(
    value: Tensor, total_count: Tensor, probs: Tensor
) -> Tensor

引数

  • value: 試行成功回数を表すテンソル
  • total_count: 成功までの試行回数の上限を表すテンソル
  • probs: 1回の試行で成功する確率を表すテンソル

戻り値

  • 対数確率密度関数の値を表すテンソル

import torch

# パラメータの設定
total_count = torch.tensor(10)
probs = torch.tensor(0.5)

# 確率変数の設定
value = torch.tensor(5)

# 対数確率密度関数の計算
log_prob = torch.distributions.negative_binomial.NegativeBinomial.log_prob(
    value, total_count, probs
)

# 出力
print(log_prob)

出力

tensor(-2.3025851)

torch.distributions.negative_binomial.NegativeBinomial.log_prob() 関数は、負の二項分布に従う確率変数の対数確率密度関数を計算します。この関数は、確率分布モジュールtorch.distributionsの重要な機能の一つであり、様々な場面で利用できます。

補足

  • torch.distributionsモジュールには、様々な確率分布を扱うための関数が用意されています。詳細は、PyTorchの公式ドキュメントを参照してください。
  • 負の二項分布に関する詳細は、統計学の教科書や文献を参照してください。


負の二項分布のサンプルコード

パラメータの確認

import torch

# パラメータの設定
total_count = torch.tensor(10)
probs = torch.tensor(0.5)

# パラメータの確認
print(f"total_count: {total_count}")
print(f"probs: {probs}")
total_count: tensor(10)
probs: tensor(0.5)

対数確率密度関数の計算

# 確率変数の設定
value = torch.tensor(5)

# 対数確率密度関数の計算
log_prob = torch.distributions.negative_binomial.NegativeBinomial.log_prob(
    value, total_count, probs
)

# 対数確率密度関数の確認
print(f"log_prob: {log_prob}")

出力

log_prob: tensor(-2.3025851)

確率質量関数の計算

# 確率質量関数の計算
pmf = torch.distributions.negative_binomial.NegativeBinomial.pmf(
    value, total_count, probs
)

# 確率質量関数の確認
print(f"pmf: {pmf}")

出力

pmf: tensor(0.11574074)

サンプリング

# サンプリング
samples = torch.distributions.negative_binomial.NegativeBinomial(
    total_count, probs
).sample((10,))

# サンプリング結果の確認
print(f"samples: {samples}")

出力

samples: tensor([5, 6, 4, 7, 5, 5, 6, 5, 4, 6])

プロット

import matplotlib.pyplot as plt

# 確率質量関数のプロット
x = torch.arange(0, 20)
pmf = torch.distributions.negative_binomial.NegativeBinomial(
    total_count, probs
).pmf(x)

plt.plot(x, pmf.numpy())
plt.xlabel("試行成功回数")
plt.ylabel("確率質量関数")
plt.show()

グラフ

負の二項分布の確率質量関数: [無効な URL を削除しました]

  • 上記のコードは、PyTorch 1.12.1で動作確認しています。
  • コードを実行する前に、PyTorchとmatplotlibをインストールする必要があります。


負の二項分布の確率密度関数を計算する他の方法

直接計算

P(X = k) = (k + total_count - 1) choose (k - 1) * probs^k * (1 - probs)^(total_count - k)
  • k: 試行成功回数
  • total_count: 成功までの試行回数の上限
  • probs: 1回の試行で成功する確率

この式は、二項定理を用いて導出できます。

scipy.statsモジュール

Pythonのライブラリscipy.statsには、様々な確率分布を扱うための関数が用意されています。負の二項分布の確率密度関数は、scipy.stats.nbinom.pmf() 関数で計算できます。

import scipy.stats

# パラメータの設定
total_count = 10
probs = 0.5

# 確率変数の設定
value = 5

# 確率密度関数の計算
pmf = scipy.stats.nbinom.pmf(value, total_count, probs)

# 確率密度関数の確認
print(f"pmf: {pmf}")

出力

pmf: 0.11574074074074075

R言語では、statsパッケージに負の二項分布を扱う関数が用意されています。dnbinom() 関数は、負の二項分布の確率密度関数を計算します。

library(stats)

# パラメータの設定
total_count <- 10
probs <- 0.5

# 確率変数の設定
value <- 5

# 確率密度関数の計算
pmf <- dnbinom(value, total_count, probs)

# 確率密度関数の確認
print(pmf)

出力

[1] 0.11574074074074075

負の二項分布の確率密度関数を計算するには、様々な方法があります。状況に応じて、適切な方法を選択してください。

補足

  • 上記の方法は、いずれも離散的な確率分布を扱う方法です。
  • 連続的な確率分布を扱う場合は、積分を用いて確率密度関数を計算する必要があります。



パフォーマンス向上:PyTorch Dataset と DataLoader でデータローディングを最適化する

Datasetは、データセットを表す抽象クラスです。データセットは、画像、テキスト、音声など、機械学習モデルの学習に使用できるデータのコレクションです。Datasetクラスは、データセットを読み込み、処理するための基本的なインターフェースを提供します。



画像処理に役立つ PyTorch の Discrete Fourier Transforms と torch.fft.ihfft2()

PyTorch は Python で機械学習を行うためのライブラリであり、画像処理や音声処理など様々な分野で活用されています。Discrete Fourier Transforms (DFT) は、信号処理や画像処理において重要な役割を果たす数学的な変換です。PyTorch には torch


PyTorchで信号処理を行うその他の方法:フィルタリング、スペクトログラム、波形生成

PyTorchは、機械学習やディープラーニングに特化した強力な数学計算ライブラリです。その中でも、「Discrete Fourier Transforms(DFT)」と呼ばれる信号処理に役立つ機能が提供されています。DFTは、時間領域の信号を周波数領域に変換する数学的な操作です。そして、その逆変換を「Inverse Discrete Fourier Transform(IDFT)」と呼びます。


torch.fft.ifftを使いこなせ!画像処理・音声処理・機械学習の強力なツール

PyTorchは、Pythonにおけるディープラーニングフレームワークの一つです。torch. fftモジュールには、離散フーリエ変換(DFT)と逆離散フーリエ変換(IDFT)を行うための関数群が用意されています。torch. fft. ifftは、DFTの結果を入力として受け取り、IDFTを実行する関数です。


PyTorchで多 boyut DFT:torch.fft.hfftn()の使い方とサンプルコード

torch. fft. hfftn() は、入力テンソルの多 boyut DFT を計算します。この関数は以下の引数を受け取ります。input: 入力テンソル。s: DFT を実行する軸のリスト。デフォルトでは、入力テンソルのすべての軸に対して DFT が実行されます。



PyTorch Tensor の要素をインデックスに基づいて選択的に集計する torch.Tensor.index_reduce_ メソッドとは?

torch. Tensor. index_reduce_ メソッドは、PyTorch Tensor の要素をインデックスに基づいて選択的に集計します。これは、torch. sum や torch. mean などの集約関数を特定のインデックスに沿って適用するような場合に役立ちます。


PyTorch Tensor の add_ メソッド:要素ごとの加算をマスターしよう

形式:torch. Tensor. add_(input, *, alpha=1)引数: input (Tensor):加算する Tensor alpha (float, オプション):加算結果のスケーリング係数input (Tensor):加算する Tensor


torch.Tensor.addcdiv_ メソッドのサンプルコード

引数input (Tensor): 演算の対象となる Tensortensor1 (Tensor): 乗算する Tensorvalue (Number, optional): 乗算前にかける定数。デフォルトは 1out (Tensor, optional): 出力結果を格納する Tensor。省略された場合は input が使用される


PyTorch Tensor の torch.Tensor.sspaddmm メソッド

torch. Tensor. sspaddmm は、PyTorch の Tensor クラスに属するメソッドで、疎行列と稠密行列の積和と、その結果を疎行列に疎形式で加算する計算を効率的に実行するために使用されます。このメソッドは、スパースなデータセットや大規模な行列演算を扱う場合に特に有効です。


PyTorch モデルの推論速度を劇的に向上させる torch.jit.ScriptModule.half() の詳細解説

PyTorch の Torch Script は、Python のコードを効率的な C++ コードに変換し、推論速度を大幅に向上させるためのツールです。torch. jit. ScriptModule. half() は、モデルを半精度浮動小数点数形式 (float16) に変換し、メモリ使用量と計算量を削減するために使用されます。