パラメータ¶
基礎知識.¶
このパッケージのモデルの多くは、各サブクラスが“パラメータ化されている”からである Model
各メンバが固定されたパラメータのセットによって区別されるモデル系列全体を表し、これらのパラメータは、モデルをいくつかの従属変数および独立変数(ソフトウェアパッケージ全体にわたってモデルの出力および入力とも呼ばれる)に一致させる。
パラメータは、モデルの基本的な評価、モデルとデータとの適合、および各モデルに関する情報(文書を含む)をユーザに提供するために、このソフトウェアパッケージ内の3つの異なるコンテキストで使用される。
ほとんどのサブクラスは Model
具体的には、特定の物理的または統計的モデルを実装するモデルは、固定されたパラメータのセットを有し、モデルのインスタンスのためにこれらのパラメータを指定することができる。いくつかのモデル(特に多項式)があり,その中でパラメータの数はモデルのある他の属性(多項式の場合の次数)に依存する.
モデル保守パラメータ名リスト, param_names
それがそうです。単一のパラメータは Parameter
これは,実際のパラメータ値のエージェントを提供する.簡単な数学演算は、それらを使用して実行されてもよいが、それらは、それらの値および文書の任意の制約のようなモデルパラメータに固有の追加の属性をさらに含む。
パラメータ値はスカラーであってもよい or 数字の値。いくつかのパラメータは、本質的には配列であることが要求される(例えば、 AffineTransformation2D
). In most other cases, however, array-valued parameters have no meaning specific to the model, and are simply combined with input arrays during model evaluation according to the standard Numpy broadcasting rules それがそうです。
パラメータ制約.¶
astropy.modeling
様々なタイプのパラメータ制約をサポートする.彼らは実現されました Parameter
すべての適切なパラメータを定義するクラスは、単一のパラメータまたはモデルインスタンスに対して設定することができる。
♪the astropy.modeling.Parameter.fixed
制約はブール値であり,指示パラメータはフィッティング過程で“固定”を保持するか“凍結”を保持するかである.例えば修復は stddev
一種 Gaussian1D
モデルは適合パラメータリストから除外されることを意味します
>>> from astropy.modeling.models import Gaussian1D
>>> g = Gaussian1D(amplitude=10.2, mean=2.3, stddev=1.2)
>>> g.stddev.fixed
False
>>> g.stddev.fixed = True
>>> g.stddev.fixed
True
astropy.modeling.Parameter.bounds
パラメータの最小値と最大値を設定するデジタルタプルである. (None, None)
指示パラメータ値はバインドされていない. bounds
ご利用いただけます min
そして max
属性です。分配する. None
対応する属性に設定すると、パラメータ上のバインディングが除去されます。例えば、設定 mean
の価値 Gaussian1D
モデルは設定することで min
そして max
**
>>> g.mean.bounds
(None, None)
>>> g.mean.min = 2.2
>>> g.mean.bounds
(2.2, None)
>>> g.mean.max = 2.4
>>> g.mean.bounds
(2.2, 2.4)
または使用する bounds
物件::
>>> g.mean.bounds = (2.2, 2.4)
astropy.modeling.Parameter.tied
ユーザによって提供される同調可能関数であり、モデルインスタンスを受け取り、パラメータの値を返す。化合物モデルの制約を設定する際に最も有用であり、例えば2つのパラメータ間の比率 (example )。
モデルを初期化する際に制約を設けてもよい.例えば:
>>> g = Gaussian1D(amplitude=10.2, mean=2.3, stddev=1.2,
... fixed={'stddev': True},
... bounds={'mean': (2.2, 2.4)})
>>> g.stddev.fixed
True
>>> g.mean.bounds
(2.2, 2.4)
パラメータ例¶
モデルクラスを直接リフレクションして、それらがどのようなパラメータを受け入れるかを見つけることができます。
>>> from astropy.modeling import models >>> models.Gaussian1D.param_names ('amplitude', 'mean', 'stddev')
中の項の順序
param_names
リストは関連している-これは,このモデルのインスタンスを構築する際にこれらのパラメータ値を入力する手順と同じである.>>> g = models.Gaussian1D(1.0, 0.0, 0.1) >>> g <Gaussian1D(amplitude=1.0, mean=0.0, stddev=0.1)>
しかし、パラメータは、キーワードパラメータ(任意の順序で)として提供されてもよい。
>>> g = models.Gaussian1D(mean=0.0, amplitude=2.0, stddev=0.2) >>> g <Gaussian1D(amplitude=2.0, mean=0.0, stddev=0.2)>
したがって,本当に重要なのは,個々のモデルが受け取るパラメータの名前(と意味)を知ることである.個々のモデルに関するより多くの情報を使用することも可能である
help
内蔵::>>> help(models.Gaussian1D)
モデルの他の属性に応じて、いくつかのタイプのモデルは、異なる数のパラメータを有することができる。特に、多項式モデルのパラメータは、その係数であり、その数は、多項式の次数に依存する。
>>> p1 = models.Polynomial1D(degree=3, c0=1.0, c1=0.0, c2=2.0, c3=3.0) >>> p1.param_names ('c0', 'c1', 'c2', 'c3') >>> p1 <Polynomial1D(3, c0=1., c1=0., c2=2., c3=3.)>
基本的な
Polynomial1D
クラスのうち,パラメータは名前が呼ばれるc0
通り抜けるcN
どこだ?N
多項式の次数です。上の例は多項式を表す \(3x^3 + 2x^2 + 1\) それがそうです。いくつかのモデルの1つまたは複数のパラメータにもデフォルト値があります。例えば、多項式モデルの場合、すべての係数のデフォルト値はゼロであり、これは、最初に係数を指定せずに多項式インスタンスを作成することを可能にする:
>>> p2 = models.Polynomial1D(degree=4) >>> p2 <Polynomial1D(4, c0=0., c1=0., c2=0., c3=0., c4=0.)>
そして,モデル上のパラメータと同名の属性にアクセスすることでパラメータを設定/更新することができる:
>>> p2.c4 = 1 >>> p2.c2 = 3.5 >>> p2.c0 = 2.0 >>> p2 <Polynomial1D(4, c0=2., c1=0., c2=3.5, c3=0., c4=1.)>
この例は現在多項式を表している \(x^4 + 3.5x^2 + 2\) それがそうです。
多項式の係数は、すべてのパラメータがキーワードパラメータとして提供されるので、辞書にパラメータを渡すことによって設定することができる。
>>> ch2 = models.Chebyshev2D(x_degree=2, y_degree=3) >>> coeffs = dict((name, [idx, idx + 10]) ... for idx, name in enumerate(ch2.param_names)) >>> ch2 = models.Chebyshev2D(x_degree=2, y_degree=3, n_models=2, ... **coeffs) >>> ch2.param_sets array([[ 0., 10.], [ 1., 11.], [ 2., 12.], [ 3., 13.], [ 4., 14.], [ 5., 15.], [ 6., 16.], [ 7., 17.], [ 8., 18.], [ 9., 19.], [10., 20.], [11., 21.]])
キーワードパラメータを直接使用することもできます
>>> ch2 = models.Chebyshev2D(x_degree=2, y_degree=3, ... c0_0=[0, 10], c0_1=[3, 13], ... c0_2=[6, 16], c0_3=[9, 19], ... c1_0=[1, 11], c1_1=[4, 14], ... c1_2=[7, 17], c1_3=[10, 20,], ... c2_0=[2, 12], c2_1=[5, 15], ... c2_2=[8, 18], c2_3=[11, 21])
各パラメータ値は、異なる大きさおよび形状の配列であってもよい。
>>> p3 = models.Polynomial1D(degree=2, c0=1.0, c1=[2.0, 3.0], ... c2=[[4.0, 5.0], [6.0, 7.0], [8.0, 9.0]]) >>> p3(2.0) array([[21., 27.], [29., 35.], [37., 43.]])
これはNumpy式を計算することに等価である:
>>> import numpy as np >>> c2 = np.array([[4.0, 5.0], ... [6.0, 7.0], ... [8.0, 9.0]]) >>> c1 = np.array([2.0, 3.0]) >>> c2 * 2.0**2 + c1 * 2.0 + 1.0 array([[21., 27.], [29., 35.], [37., 43.]])
多くの場合、配列値パラメータを使用する場合、パラメータ間でNumpy配列の標準ブロードキャストルールを遵守しなければならないことに留意されたい。
>>> models.Polynomial1D(degree=2, c0=1.0, c1=[2.0, 3.0], ... c2=[4.0, 5.0, 6.0]) Traceback (most recent call last): ... InputParameterError: Parameter u'c1' of shape (2,) cannot be broadcast with parameter u'c2' of shape (3,). All parameter arrays must have shapes that are mutually compatible according to the broadcasting rules.