はじめに
この実験では、確率密度関数を推定するために使用される手法である密度推定を検討します。具体的には、密度を推定する非パラメトリック手法であるカーネル密度推定に焦点を当てます。
VM のヒント
VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使って練習しましょう。
時々、Jupyter Notebook が読み込み終了するまで数秒待つ必要があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。
学習中に問題に遭遇した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。
必要なライブラリをインポートする
まず、密度推定に使用するライブラリをインポートする必要があります。密度推定には、sklearn.neighbors モジュールの KernelDensity 推定器と、データ操作に numpy ライブラリを使用します。
from sklearn.neighbors import KernelDensity
import numpy as np
サンプルデータを生成する
次に、密度推定を行うためのサンプルデータを生成します。この実験では、100 個の点からなる 1 次元のデータセットを生成します。データの生成には正規分布を使用します。
np.random.seed(0)
X = np.random.normal(0, 1, 100).reshape(-1, 1)
カーネル密度推定器をフィットさせる
次に、KernelDensity 推定器のインスタンスを作成して、データにフィットさせます。推定器のカーネルの種類とバンド幅を選ぶことができます。たとえば、ガウスカーネルを使用してバンド幅を 0.2 に設定することができます。
kde = KernelDensity(kernel='gaussian', bandwidth=0.2).fit(X)
サンプルを評価する
推定器をフィットさせた後、score_samples メソッドを使用して、推定された密度関数の下でのサンプルの対数尤度を計算できます。これにより、密度推定に基づいて各サンプルがどれだけ確からしいかを示す尺度が得られます。
scores = kde.score_samples(X)
密度推定を可視化する
最後に、ヒストグラムと推定された密度関数を使って密度推定を可視化できます。元のデータのヒストグラムと推定された密度関数をプロットすることができます。
import matplotlib.pyplot as plt
bins = np.linspace(-5, 5, 50)
plt.hist(X, bins=bins, density=True, alpha=0.5, label='Histogram')
plt.plot(X, np.exp(scores), color='red', label='Kernel Density Estimate')
plt.legend()
plt.show()
まとめ
この実験では、scikit - learn のKernelDensity推定器を使ってカーネル密度推定を行う方法を学びました。カーネル密度推定は、確率変数の確率密度関数を推定するための強力な手法です。データセットにカーネル密度推定器をフィットさせることで、潜在的な密度を推定し、ヒストグラムと推定された密度関数を使って可視化することができます。これにより、データの分布を理解し、確率的な予測を行うことができます。