プロが教える店舗&オフィスのセキュリティ対策術

最大エントロピー原理から正規分布の導出をpythonで行いたいです。
(参考:https://logics-of-blue.com/information-theory-ba …
上記のサイトを見る限り、正規分布を導出するためには3つの制約式のもとで目的関数であるエントロピーを最大化する数理最適化問題を解くと思います。
pythonでこの問題を実装する際に役に立ちそうなパッケージは何があるでしょうか。
ないとするとどのようにして実装すればよいか簡単なアドバイスを頂けませんか。

PuLPという数理最適化のパッケージがあるそうですが、調べてみると混合整数計画問題で使用できるとありました。よってこの問題を解く際にはこのパッケージは使えないと思っていますが正しいでしょうか。

質問者からの補足コメント

  • 誤って質問を男性リクエストにしてしまいました。
    特に回答者様の性別は気にしていません。
    よろしくお願いいたします。

      補足日時:2022/06/21 13:12

A 回答 (2件)

pythonがどうして出てくるのか不思議だなあ。



確率密度関数をp(u)、pの平均値をμ、標準偏差をσとする。pのエントロピー
 E = ∫{-∞~∞} p log(p) du

  x = (u - μ)/σ
  p(u) = y(x)
という変数変換をやると、pは平均値0、標準偏差1の確率密度関数yで表せる。そして、yについて
  E = (1/σ)∫{-∞~∞} y log(y) dx
となる。なので「最大エントロピー原理」とおっしゃるのは
  ∫{-∞~∞} A(x) dx = 1, A(x) = y(x)
  ∫{-∞~∞} B(x) dx = 0, B(x) = x y(x)
  ∫{-∞~∞} C(x) dx = 1, C(x) = (x^2) y(x)
  y(-∞) = y(~∞) = 0
という条件のもとで、汎関数Eに関する停留曲線yを求めるという、条件付き変分法の問題のこと。

 変分法の処方に素直に従えば、yが満たすべき条件は
  ∂(y log(y))/∂y + α(∂A/∂y) + β(∂B/∂y) + γ(∂C/∂y) = 0
すなわち
  y = e^(-( 1 + α + βx + γ(x^2)))
  = W e^(-βx) e^(-γ(x^2)) (ただしWは正の定数)
と書き換えられ、これでyの形は決まった。あとはパラメータW, β, γを
  ∫{-∞~∞} y dx = 1
  ∫{-∞~∞} xy dx = 0
  ∫{-∞~∞} (x^2)y dx = 1
  y(-∞) = y(~∞) = 0
という条件に合うように決めるだけです。左辺の積分をやれば簡単な方程式が得られる。その結果、yは標準正規分布の確率密度関数だとわかる。以上。

 というわけで、python?実装?なんのこっちゃです。
    • good
    • 0

エントロピー最大化のような連続非線形の最適化問題なら基本的に scipy.optimize でできるでしょう。

minimizeしかなかったかもしれませんが、最大化問題の目的関数をマイナスすれば良いだけですね。
参考 https://qiita.com/alchemist/items/dad4a083ce8dc9 …

PuLPは混合整数問題を解くものですが、これは目的関数・制約条件とも線形である必要があります。質問の問題は非線形になるのでPuLPは使えないでしょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!