2016-10-24 52 views
0

私が知っている重みを使ってランダムに1000データポイントを生成しました。今、私はsig^2の値と重みを推定する-log尤度関数を最小にしようとしています。私はプロセスを概念的に分類していますが、コード化しようとすると失われてしまいます。MLEの推定とカーブフィッティングにscipy optimizeを使用する

これは私のモデルである:

p(y|x, w, sig^2) = N(y|w0+w1x+...+wnx^n, sig^2) 

私は今しばらくの間、グーグルでてきたと私はscipy.stats.optimize.minimize機能は、このために良いです学んだことが、私は得ることができませんそれは正しく機能する。私が試したすべてのソリューションは、私が解決策を得た例のために働いていますが、私はそれを私の問題に推論することができません。

x = np.linspace(0, 1000, num=1000) 
data = [] 
for y in x: 
     data.append(np.polyval([.5, 1, 3], y)) 

#plot to confirm I do have a normal distribution... 
data.sort() 
pdf = stats.norm.pdf(data, np.mean(data), np.std(data)) 
plt.plot(test, pdf) 
plt.show() 

#This is where I am stuck. 
logLik = -np.sum(stats.norm.logpdf(data, loc=??, scale=??)) 

I者らは、式エラー(ワット)= 0.5 *和(ポリ(x_nに関する、ワット - y_n)^ 2は、したがって、重みの誤差を最小化に関連します私の可能性を最大にしますが、私はこれをコード化する方法を理解していません...私はsig^2と同様の関係を見つけましたが、同じ問題があります。誰かがカーブフィッティングを助けるためにこれを行う方法を明確にすることはできますか?多分私は使用できる擬似コードを投稿するために行く?

+0

「テスト」とは何ですか?あなたが使用できる 'test'の例を提供するためにあなたの質問を編集できますか?また、あなたの希望する出力は何ですか?尤度を最大にする重みとシグマの値? – cd98

+0

ああ、私が使っていた古いリストだったのですが、私はデータで置き換えられました、それはSOコードのタイプミスでした。はい、私は可能性を最大にする重みとシグマの値を見つけようとしています。 – user2967087

答えて

2

はい、minimizeで尤度フィッティングを実装するのは難しいですが、私はそれに多くの時間を費やしています。だから私はそれを包んだ。私はの役割を理解していないので、私は、私は正確にあなたのディストリビューションを理解していない認めざるを得ない

from symfit import Parameter, Variable, Likelihood, exp 
import numpy as np 

# Define the model for an exponential distribution 
beta = Parameter() 
x = Variable() 
model = (1/beta) * exp(-x/beta) 

# Draw 100 samples from an exponential distribution with beta=5.5 
data = np.random.exponential(5.5, 100) 

# Do the fitting! 
fit = Likelihood(model, data) 
fit_result = fit.execute() 

:私は臆面もなく自分自身のパッケージsymfitを差し込み可能性がある場合は、あなたの問題は、このような何かを行うことによって解決することができますwですが、例としてこのコードを使用すると、それをどのように適応させるかがわかります。

もしそうでなければ、あなたのモデルの完全な数式を教えてください。私はさらにお手伝いできます。

詳細についてはdocsを確認してください。 (フードの中で起こることの技術的な説明については、herehereを読んでください)

1

あなたの設定に問題があると思います。最尤法では、データを観察する確率を最大にするパラメータを取得します(特定のモデルがある場合)。

イプシロンは、N(0、シグマ)である

enter image description here

:あなたのモデルがあると思われます。

enter image description here

をまたは同等に取得するためにログを取る:

だからあなたはそれを最大限に

enter image description here

この場合、fは対数正規確率密度関数であることができますstats.norm.logpdfで取得してください。次に、を使用して、i点のそれぞれで評価されたstats.norm.logpdfの合計である式を最大にし、1からサンプルサイズまでを使用する必要があります。

あなたが正しく理解していれば、yベクトルにxベクトルを加えたコードが見つかりません!これらのベクトルのサンプルを表示し、その日付のMLEを見積もるためのサンプルコードを含むように回答を更新することができます。

関連する問題