ベルヌーイ分布のエントロピーと、分布同士のKL距離を計算した。(前回の記事はKL距離のコードが間違っていたので修正した)
本文と同じものが数値的に計算できた。


ベルヌーイ分布のエントロピーと、分布同士のKL距離を計算した。(前回の記事はKL距離のコードが間違っていたので修正した)
本文と同じものが数値的に計算できた。


確率分布クラスを作成して、それを元にサンプリングで期待値、エントロピー、KLダイバージェンスを計算するコードを自作。
2.2.1 のベルヌーイ分布のエントロピーのグラフを作成してみた。
Pythonで実装したり手計算したりしながら読む緑ベイズ。
2章 2.1.5 サンプリングによる期待値の近似計算
初歩的で恥ずかしいが、式 (2.14)
に対して、エントロピーの定義 (2.10) を適用するのに混乱してしまった
自分が混乱したのは、
# 2.1.5 サンプリングによる期待値の近似計算 import random import math from abc import ABC, abstractmethod class DiscreteProb(ABC): @abstractmethod def pmf(self, x: int): pass @abstractmethod def __call__(self): pass class MyDist(DiscreteProb): def pmf(self, x: int) -> float: assert x in [0, 1] if x == 0: return 2./3 else: return 1./3 def __call__(self) -> int: if random.random() < 2./3: return 0 else: return 1 def sample_expect(p, L, f=None): # p: 確率分布 # f: 関数 # L: サンプル数 if f is None: f = lambda x: x return sum([f(p()) for _ in range(L)]) / L p = MyDist() -sample_expect(p, 1000, lambda x: math.log(p.pmf(x))) # ==> 0.6452940325819064