V 4.0におけるモデリングの変更

内部コードの複雑さを低減し,性能を向上させ,複合モデルにおけるパラメータ挙動をより直感的にするために,内部でモデリングコードを多く変更し,特に複合モデルとパラメータを変更した.このページは重要な変更をまとめています。最後に、より多くの技術的詳細が提示されますが、なぜいくつかの変更が必要なのかを知りたくない限り、一般にこれらの詳細を読む必要はありません。

  • モデリングクラス式のサポートは削除した.モデルクラスインスタンスの式は依然として完全にサポートされている.これは,実現を簡略化し,性能を向上させ,新たなパラメータ意味をサポートするためである.例えば:

    もはや有効ではありません

    NewCompoundClass = Gaussian1D + Const1D
    

    まだ有効です:

    newmodel = Gaussian1D(3.2, 7.1, 2.1) + Const1D(3.)
    
  • V 4.0の前に、パラメータはクラス記述子であり、これは、モデルの値を保存できないことを意味する。代わりに,これらの値はモデル内部に保存される.複合モデルを用いた場合,これは複合モデルの複製値を必要とするため混乱する.したがって、複合モデル中の値を変更することは、構成モデルのパラメータ値を変更することはなく、その逆も同様である。現在,パラメータは毎回使用される異なる事例であり,それらは確かにパラメータ値を含むため,複合モデルは現在構成モデルと同じ値を共有している.

  • 従来モデルセットを用いた場合,パラメータ形状はモデル数に応じたサイズを示すことはなかった.今やっています例えば:

    旧::

    In [1]: g = Gaussian1D([1,1], [1,2], [2,4], n_models=2)
    In [2]: g.amplitude
    Out[2]: Parameter('amplitude', value=[1. 1.])
    In [3]: g.amplitude.shape
    Out[3]: ()
    

    新規::

    In [1]: g = Gaussian1D([1,1], [1,2], [2,4], n_models=2)
    In [2]: g.amplitude
    Out[2]: Parameter('amplitude', value=[1. 1.])
    In [3]: g.amplitude.shape
    Out[3]: (2,)
    
  • 従来,これらの値はモデル事例中の1つの配列に保存されており,その配列のスライスに値を割り当てることができた.再割当て配列は確かにパラメータを更新したが,スライスを割り当てることはできない.新たな方法は,Parameters属性に代入することで配列全体を置き換えるか,パラメータ値に直接代入することである.

  • “入力”ユニット,すなわち入出力ユニットを持たない複合モデルに入出力ユニットを提供するが,コンポーネントモデルはサポートされている. _parameter_units_for_data_units() 手法の適用性はより制限されており,複合式でのみ使用される. + あるいは…。 - オペレータです。過去の行為は任意の割当て単位を招く場合があり,パラメータの単位が正しくない場合がある.

  • スライスは今もっと制限されている。従来のモデルは以下のように定義されていた.

    m = m1 * m2 + m3
    

    このスライスを許可します:

    m[1:] # results in m2 + m3
    

    現在,表現木中のサブモデル(これを実行する操作系列と見なす)のみがスライスとして許可されている.これはいくつかの意味のあるスライスが今機能していないということを意味する。以下のコードは、どれが許容され、どれが許可されていないかを説明する。

    m = m1 + m2 + m3 + m4
    m[:2] # Results in m1 + m2, works
    m[1:] # Should result in m2 + m3 + m4, does not work
           # since m1 is part of all subexpressions.
    
  • 全体的に、すべての公開方法は変わらないままだ。例外的な場合は n_submodels これはかつては一つの方法だったが、現在は属性である。

  • 多くの非公共的方法は、特に複合モデルのために変化した。

  • ♪the _CompoundModelMeta メタクラスは存在しなくなった.

技術的詳細

複合モデルは変更を実現する

複合モデルは従来,複合モデルのメタクラスを用いて実現されていたが,Modelクラス(それ自体に1つのメタクラスを持つ)も継承していた.この手法を採用した要因は,モデルクラスの式を支援するためである.しかしながら、モデルクラスの式がモデルインスタンスも含む場合、これは、混乱した実装、いくつかの性能低下、およびいくつかの奇妙な結果をもたらす。

新たな実現は,複合モデルのメタクラスを破棄し,それに応じてモデルクラスの式をサポートするのではなく,モデルインスタンスの式のみをサポートする.従来,式木はプライベート属性であった.現在,複合クラス自体が1つの表現木である.

複合モデルの多くのプライベート方法は変更された。