最適な解から遠く離れている勾配が非常に小さい場合、PythonでMLE推定量を数値的に推定する方法は?


7

私は、平均と分散の両方が独立変数の線形関数として定義されている正規分布を使用してデータセットをモデル化する方法を調査しています。

N〜(f(x)、g(x))のようなもの。

私はこのようなランダムなサンプルを生成します:

def draw(x):
    return norm(5 * x + 2, 3 *x + 4).rvs(1)[0]

だから、私の分布のパラメーターとして5、2、4を取得したいと思います。

私はサンプルを生成します:

smp = np.zeros((100,2))

for i in range(0, len(smp)):
    smp[i][0] = i
    smp[i][1] = draw(i)

尤度関数は次のとおりです。

def lh(p):
    p_loc_b0 = p[0]
    p_loc_b1 = p[1]
    p_scl_b0 = p[2]
    p_scl_b1 = p[3]

    l = 1
    for i in range(0, len(smp)):
        x = smp[i][0]
        y = smp[i][1]
        l = l * norm(p_loc_b0 + p_loc_b1 * x, p_scl_b0 + p_scl_b1 * x).pdf(y)

    return -l

したがって、モデルで使用される線形関数のパラメーターは、p 4変数ベクトルで与えられます。

scipy.optimizeを使用すると、非常に低いxtolを使用してMLEパラメーターを解くことができ、すでにソリューションを開始点として提供しています。

fmin(lh, x0=[2,5,3,4], xtol=1e-35)

これはうまくいきません:

Warning: Maximum number of function evaluations has been exceeded.
array([ 3.27491346,  4.69237042,  5.70317719,  3.30395462])

xtolをより高い値に上げても効果はありません。

だから私は実際のソリューションから遠く離れた開始ソリューションを使ってみます:

>>> fmin(lh, x0=[1,1,1,1], xtol=1e-8)
Optimization terminated successfully.
         Current function value: -0.000000
         Iterations: 24
         Function evaluations: 143
array([ 1.,  1.,  1.,  1.])

それは私に考えさせます:

PDFは、主に平均の周りにクラスター化されており、平均から数標準偏差だけ離れた非常に低い勾配を持っています。これは、数値的手法にはあまり良くないはずです。

では、勾配が解からゼロに非常に近い関数で、このような数値推定をどのように行うのでしょうか。

回答:


7

エラーが発生する理由はいくつかあります。最初に、尤度ではなく対数尤度の使用を検討する必要があります。多くの小さな数の乗算には数値の問題があります(何百万ものサンプルがある場合、lhdの何百万もの小さな数を乗算する必要があったと想像してください)。また、対数尤度を扱う場合は、勾配を必要とする最適化手法のために勾配を取ることは、多くの場合より簡単です。一般に、最適化の問題を処理するときは、変数の積ではなく合計である目的を持つことをお勧めします。

第2に、fminはNeciper-Meadシンプレックスアルゴリズムを使用しており、scipyのドキュメントによると収束の保証はありません。つまり、収束は完全にランダムであり、元のパラメータに近いパラメータを見つけることは期待できません。これを回避するには、確率的勾配降下法やBFGSなどの勾配ベースの方法を使用することをお勧めします。生成モデル(rvはガウス分布)がわかっているので、尤度と対数尤度を次のように記述できます。 方程式

ここで、a、b、c、dはそれぞれモデルパラメーター5、2、3、4です。次に、[a、b、c、d]に関する勾配を取り、それをfmin_bfgsの素数入力に送ります。分散が異なるため、線形回帰だけで解決できることは、今では厄介な問題であることに注意してください。

最後に、http://en.wikipedia.org/wiki/Linear_regression#Least-squares_estimation_and_related_techniquesおよびhttp://en.wikipedia.org/wiki/Heteroscedasticityで一般化された最小二乗法をチェックして、問題について話し、いくつかの利用可能なソリューションを提供します。

幸運を!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.