パラメータ

基礎知識.

このパッケージのモデルの多くは、各サブクラスが“パラメータ化されている”からである 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.