process前回の記事の続きです。ushi-goroshi.hatenablog.com今回は図3.16と3.20に挑戦します。データはサポートサイト(http://chasen.org/~daiti-m/gpbook/data/gpr.dat)から取得しました。5)まずは図3.16から。取得したデータをプロットしてみます。2)本ではX軸の数値が書かれていませんが、多分これで合っています。このデータからRBFカーネルを使ってxの共分散行列を作成しますが、前回定義したRBFカーネルは入力としてスカラを想定していました。xはベクトルとなることもあるため、RBFカーネルを少し修正します。"2")^2/theta2)}ベクトル同士の距離を計算するためにnorm関数を使いました。ここでは距離としてL2ノルム(ユークリッド距離)を使用していますが、その後に2乗していることに注意してください。2*d)のサイズとなる行列を新たに作成する(tmp)各行について、前半d個の要素を持つベクトルと後半d個のベクトルを抽出してカーネルを計算する(ret)という少しややこしい手順を踏んでいます。0.477775042このような形でapplyを使ってすっきり書きたいのですが、applyを二重で渡す方法がわからなかったため、一度すべての組み合わせを作成することにしました。これでサンプルデータの共分散行列を見てみましょう。1.000000e+00合っているようです。共分散行列が数字のままだと結果がわかりにくいのでヒートマップを作成してみます。T)おや、なんか色が変ですね、対角要素は同じ色になるはずなのですが。gplotsのheatmap.2関数を使ってみます。"none")こっちは良さそうですね。"l")良さそうです。ところでこのグラフを何回かプロットしてみるとわかりますが、y[1]とy[2]およびy[4]とy[5]の間には他と比べて大きな差が生じやすい傾向にあります。これは、train$xの数値が離れているため共分散が小さい("似ていない")ことを反映しているのだと思います。そのためyのプロットも少し滑らかさに欠けるものとなっています。図3.17のアルゴリズムを参考に、yの平均と分散を推定します。theta1、theta2およびtheta3はそれぞれ1、0.4、0.1とのことですが、作図の印象を図3.16に近づけるためにtheta3を0.02としました。"")ちょっと本のグラフとは異なりますが、同様のプロットを作成することが出来ました。ここで大事なポイントとして、これは本にも記載されていることですが、上記の計算では一般の機械学習アルゴリズムで認められる「反復的な処理によって点推定値を求める工程」(いわゆるフィッティングや最適化)は一切行われていません。平均も分散も、行列計算によって得られています。ガウス過程回帰においては(ハイパーパラメータを除いて)学習は存在しないということを押さえておく必要があると思います。上記のプロットを見るとデータが観測されている付近では分散(グレーの帯)が小さくなっていることに気付きます。左端のデータと右端のデータで顕著ですね。k)の値を減じるためVarとはちょうど反転した形状になっていますね。このkはtrain$xとtestの共分散なので、元のデータが存在する付近では共分散が大きくなっているはずです。"none")横軸がわかりにくいですが、左から右まで-1から3.5の範囲を取っています。train$xの各点付近で数値が大きくなっていることがわかります。この数値(を二乗してKで除したもの)をsから減じているため、Varでは元のデータが存在する付近において分散が小さくなっているということがわかります。0.30272710元のデータが存在する点(6行目)が相対的に小さくなっているのがわかります。続いて図3.20に取り掛かります。先ほどのガウス過程回帰ではハイパーパラメータであるtheta1、theta2、theta3に事前に決めた数値を入力していましたが、今度はこれをデータから推定しましょう。その前にrbf_knlについて引数theta1とtheta2はexpを取ってから計算するように修正します。これは本の脚注に記載のある通り、パラメータの取りうる値域に制約がある場合に、その制約を回避するためのテクニックです。以降の処理で最適化にはoptimを使用しますが、その際にmethodとしてL-BFGS-Bを指定することでパラメータに対して矩形制約を与えることも可能です(が、今回はパスします)。"2")^2/exp(theta2))}関数を新しく定義したのでget_cov_matも新たに定義しましょう。C)}ここでCは定数部です。本にしたがってCを定義すると上のCになると思うのですが、結果の対数尤度が今いち合わなかったので一旦0を与えています。パラメータの推定には影響しないはずです。optimを使って推定してみましょう。-1.73877theta1、theta2、theta3は小数点以下3桁まで合っていますね!ただし対数尤度が少し違います(本では-1.788)。optimは初期値によって影響を受けることがあるので、値を変えてもう一度。-1.73877良さそうです。ここで得られたハイパーパラメータを使ってプロットしてみましょう。これは図3.20の(a)に当たります。train$y)良さそうです。最後に、datのデータを全て使って推定してみましょう。このようなデータになります。-2.509299theta1が0.001ずれましたがパラメータとしてはうまく推定できているようです。対数尤度はやっぱり一致しません。推定されたパラメータを使ってプロットを描いてみましょう(図3.20の(b))。14:43「ガウス過程と機械学習」第3章のグラフ(一部)を作図する3Tweet広告を非表示にする関連記事2019-04-10「ガウス過程と機械学習」第3章のグラフ(一部)を作図する4前回の記事の続きです。今回は図...2019-03-15「ガウス過程と機械学習」第3章のグラフ(一部)を作図する2前回の記事の続きです。アーカイブはてなブログをはじめよう!ushi-goroshiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。