見出し画像

🚀PyMCとSciPyの違い

守備範囲も違うが、使ってる配列の違いをみる

PyMC (旧称 PyMC3) はベイズ統計モデリングと確率的機械学習のための Python パッケージで、高度なマルコフ連鎖モンテカルロ法と変分適合アルゴリズムに焦点を当てています

https://en.wikipedia.org/wiki/PyMC

多次元配列を含む数学式を定義、最適化、効率的に評価することができる Python ライブラリの Aesara に頼っています

PyMC と Stan は最も人気のある確率的プログラミングツールです

SciPy には、最適化、線形代数、積分、補間、特殊関数、FFT、信号および画像処理、ODE ソルバー、および科学と工学で一般的なその他のタスクのためのモジュールが含まれています。

SciPyパッケージは、Pythonの科学計算能力の中核をなすものです。利用可能なサブパッケージは以下の通りです。

cluster: 階層的クラスタリング、ベクトル量子化、K-means
constants: 物理定数、変換係数
fft: 離散フーリエ変換アルゴリズム
fftpack: 離散フーリエ変換のレガシーインターフェース
integrate: 数値積分ルーチン
interpolate: 補間ツール
io:データ入出力
linalg:線形代数ルーチン
misc: その他のユーティリティ(例題画像など)
ndimage: 多次元画像処理のための各種関数
ODR: 直交距離回帰のクラスとアルゴリズム
optimize: 線形計画法を含む最適化アルゴリズム
signal: 信号処理ツール
sparse: 疎な行列とその関連アルゴリズム
spatial: k-dツリー、最近傍、凸包などの空間構造に関するアルゴリズム
special: 特殊関数
stats: 統計関数
weave: C/C++コードをPythonの複数行文字列として書くためのツール(現在はCython[6]に移行して非推奨)

SciPyとNumPyの違いは関数の汎用性

SciPy が使用する基本的なデータ構造は、NumPy モジュールが提供する多次元配列である。NumPy は線形代数、フーリエ変換、乱数生成のためのいくつかの関数を提供しますが、SciPy の同等の関数のような一般性はありません。NumPyはまた、任意のデータ型を持つデータの効率的な多次元コンテナとして使用することができます。これにより、NumPyは様々なデータベースとシームレスかつスピーディーに統合することができます。古いバージョンの SciPy では配列の型として Numeric を使っていましたが、現在は非推奨で、より新しい NumPy の配列コードを採用しています。

https://en.wikipedia.org/wiki/SciPy

1990年代に入ると、Pythonは拡張され、Numericという数値計算用の配列型が追加された(このパッケージは最終的にTravis Oliphantが2001年に開始したNumericとNumarrayをブレンドして2006年に書いたNumPyに取って代わられた)。2000年の時点では、拡張モジュールの数が増え、科学技術計算のための完全な環境を作ることへの関心が高まっていた。2001年、Travis Oliphant、Eric Jones、Pearu Petersonは、彼らが書いたコードをマージし、その結果できたパッケージをSciPyと名付けた。新しく作られたパッケージは、Numeric配列データ構造の上に、一般的な数値演算の標準的なコレクションを提供しました。

TheanoとNumPy

Theanoは配列操作と線形代数を含む関数を定義することができるパッケージです。PyMC3のモデルを定義するとき、パラメータの空間から定数倍までの事後確率密度まで暗黙のうちにTheano関数を構築しています。そして、この関数を記号的に操作することで、その勾配にアクセスすることができます。
オリジナルの開発者はTheanoのメンテナンスをやめてしまったので、PyMC3はPyMC3の開発者によってメンテナンスされているTheanoのフォークであるTheano-PyMCを使用していることに注意しましょう。

PyMCならTheanoなんだぜ

Theanoの変数は、多くの演算に対してこれを行います。私たちは通常、numpyのバージョンではなく、theanoの関数を使うことを推奨します。なぜなら、その方が、普通の配列ではなく、記号的な入力を扱っていることが明確になるからです。

ほとんどの場合、シンボリックなTheano変数はNumPyの配列のように操作することができる。ほとんどのNumPy関数はtheano.tensorで利用可能である(これは通常ttとしてインポートされる)。多くの線形代数演算は tt.nlinalg と tt.slinalg (それぞれ NumPy と SciPy の演算) で見つけることができる。疎行列のいくつかのサポートはtheano.sparseで利用可能

TheanoとTensorFlow

2017年にTheanoが開発中止の計画を発表した後、PyMCチームはTensorFlow Probabilityを計算バックエンドとして評価したが、2020年にTheanoの開発を引き継ぐことにした


お願い致します