FrontPage
2011/06/05からのアクセス回数
ここで紹介したSageワークシートは、以下のURLからダウンロードできます。
また、Sageのサーバを公開しているサイト( 、 )にユーザIDを作成することで、ダウンロードしたワークシートを アップロードし、実行したり、変更していろいろ動きを試すことができます。
sage/PRML-逐次ベイズ学習では、 重みwの分布について解いていましたが、 実際には新しいxの値たいするtを予測することが目的となります。 ここではPRML3.3.2の予測分布、図3.8
をSageを使って試してみます。
sage/PRML-線形回帰 で使ったデータと同じものを座標Xと目的値tにセットし、関数Φを定義します。
sageへの入力:
# PRML fig.3.8の再現
# PRMLのsin曲線のデータ
data = matrix([
X = data.column(0) t = data.column(1)
# データを増やす場合
# N = 25
# X = vector([random() for i in range(25)])
# t = vector([(sin(2*pi*x) + +gauss(0, 0.2)).n() for x in X.list()]);
}}
sageへの入力:
# データのプロット
x = var('x') sin_plt = plot(sin(2*pi*x),[x, 0, 1], rgbcolor='green') data_plt = list_plot(zip(X, t)) }}
sage/PRML- エビデンス近似 のようにガウス基底関数を定義しますが、今回は0から1の範囲で定義します。
近似に使う場合には、_phiのようにj=0が1となるような項を追加します。
sageへの入力:
from pylab import linspace
# 定数をセット
M=9 mu = linspace(0, 1, M) s = 0.1 s_sq = (s)^2
# ガウス基底関数
def _phi_gauss(x, j):
}}
sageへの入力:
# ガウス基底関数で三角関数の例題を近似
# j=0に対応するため_phiを以下のように定義
def _phi(x, j):
# 初期化
alpha = 2 beta = 25 }}
予測分布は、式(3.58) $$ p(t|x, t, \alpha, \beta) = \mathcal{N}(t|m_N^T\phi(x), \sigma_N^2(x)) $$ から計算し、その分散$\sigma_N^2(x)$は、 $$ \sigma_N^2(x) = \frac{1}{\beta} + \phi(x)^T S_N \phi(x) $$ で与えられます。
sageへの入力:
# 予測分布をプロットする
def _plot_predict(X, t):
}}
以下にM=1, 2, 4, 10の予測分布を示します。パラメータは、
としました。
sageへの入力:
# 1点の場合
X_ = vector([X[4]])
t_ = vector([t[4]])
_plot_predict(X_, t_)
}}
sageへの入力:
# 2点の場合
X_ = vector([X[4], X[6]])
t_ = vector([t[4], t[6]])
_plot_predict(X_, t_)
}}
sageへの入力:
# 4点の場合
X_ = vector([X[0], X[4], X[6], X[9]])
t_ = vector([t[0], t[4], t[6], t[9]])
_plot_predict(X_, t_)
}}
sageへの入力:
# 10点の場合
_plot_predict(X, t)
}}
皆様のご意見、ご希望をお待ちしております。