尤度の最大化(パート2)
パート1では、単一の mu に対する単一の対数尤度を計算しました。パート2では、あらかじめ用意された関数 compute_loglikelihood() を使って、候補となる mu の配列の各要素に対して、対数尤度の配列を計算します。
目標は、loglikelihood 配列の値を最大にする、ただ1つの mu の推定値を見つけることです。
はじめに、プリロード済みのデータ sample_distances、sample_mean、sample_stdev と、補助関数 compute_loglikelihood() を使用します。
この演習はコースの一部です
Pythonで学ぶ線形モデリング入門
演習の手順
sample_meanを中心に、sample_stdevの広がりで値を取るようにしてmu_guessesを作成します。mu_guessesの各推定値mu_guessについて、sigmaをsample_stdevに固定し、すべてのsample_distancesに対してcompute_loglikelihood()を使います。loglikelihoods配列の最大値を見つけ、そのインデックスからmu_guessesの中のbest_muを取得します。best_muを表示し、loglikelihoodsをプロットして可視化します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Create an array of mu guesses, centered on sample_mean, spread out +/- by sample_stdev
low_guess = sample_mean - 2*sample_stdev
high_guess = sample_mean + 2*sample_stdev
mu_guesses = np.linspace(____, ____, 101)
# Compute the loglikelihood for each model created from each guess value
loglikelihoods = np.zeros(len(mu_guesses))
for n, mu_guess in enumerate(____):
loglikelihoods[n] = compute_loglikelihood(____, mu=____, sigma=sample_stdev)
# Find the best guess by using logical indexing, the print and plot the result
best_mu = mu_guesses[loglikelihoods==np.max(____)]
print('Maximum loglikelihood found for best mu guess={}'.format(____))
fig = plot_loglikelihoods(mu_guesses, loglikelihoods)