はじめに
ガウス過程回帰(Gaussian Process Regression, GPR)は、予測値だけでなく予測の不確かさ(信頼区間)まで自然に出してくれるベイズ的な回帰手法である。データが少ない領域では「自信がない」とちゃんと言ってくれる、とても誠実なモデルだ。

これがガウス過程回帰の実例だ。黒い点線が真の関数、赤い点が観測データ、青い実線が予測平均、水色の帯が95%信頼区間である。観測データの近くでは帯が狭く、データのない右端(外挿領域)では帯が大きく広がっているのが分かる。この記事は、この図がどういう理屈で出てくるのかを、一歩ずつ説明していく。
ガウス過程回帰の入門書として、↓があり、Amazonのレビューでもわかりやすいと評判なのだが、0.3節、0.5節、3章あたりで、話がつながっていなくて、私としては納得いかない。正直、これでは「わからない」、「わかっている人が導いた結論を暗記してわかった気になっているだけ」と感じた。
なので、自分で私が納得いくように書いてみた(というか、AIに何度も書き直させてわかりやすい文を生成した)。この記事では、数式の意味を噛み砕きながら、GPRの考え方を順を追って説明する。
1. 前提知識1:正規分布まわりの基礎
ガウス過程回帰と聞くと身構えてしまうが、その中身はよく知られた道具を組み合わせて、無限次元に広げただけである。本編に入る前に、2つの章に分けて前提知識を準備する。第1章では確率側の道具(正規分布まわりの基礎)を、第2章では回帰側の道具(回帰モデルの作り方)を押さえる。
この章で押さえるのは次の4つだ。
- 正規分布(1-1) … データのばらつきを表す、いちばん基本的な分布。
- 共分散と相関(1-2) … 複数の変数が「どれくらい一緒に動くか(連動するか)」を測るものさし。
- 条件付き分布(1-3) … 一部の変数を観測したとき、残りの変数がどう絞り込まれるか。これが「予測」の正体である。
- 多変量正規分布への拡張(1-4) … 2変数の話を一般の
変数へ。
いちばんシンプルな2変数(2次元)の正規分布を出発点に、順に見ていこう。
1-1. 正規分布 ―― まず2変数で感覚をつかむ
1次元の正規分布(ガウス分布)は、平均 を中心に左右対称な釣鐘型をした、おなじみの分布である。ばらつきの大きさは標準偏差
(その2乗
を分散と呼ぶ)で決まり、記号では
と書く。「
は平均
・分散
の正規分布に従う」という意味で、
は Normal(正規)の頭文字、
は「〜に従う」を表す記号である。
これを2変数に広げてみよう。2つの確率変数 がペアで正規分布に従うとき、その確率密度は「山」の形になる。1次元の正規分布が釣鐘型の曲線だったのに対し、2次元ではお椀を伏せたような曲面になる。

- 左(3D曲面):中心がいちばん高く、外側に向かってなだらかに低くなる。これが2次元正規分布の「山」。
- 右(等高線):山を真上から見たもの。等高線が楕円になっているのがポイントである。
この分布は次の2つで完全に決まる。
- 平均ベクトル
… 山の頂点の位置
- 共分散行列
… 山の「広がり方」。対角成分
が各方向の広がり、非対角成分が
と
の連動の強さ(相関
)を表す。
1-2. 共分散と相関 ―― 変数の「連動」を測る
1-1の共分散行列で「連動の強さ」と呼んだものを、ここできちんと定義する。2つの変数がどれくらい一緒に動くかを測る量が共分散(covariance) で、 と書く。
ここで は期待値(たくさんサンプルを取って平均する操作)を表す記号である。式の気持ちはこうだ ――
が平均
より大きいとき
も平均
より大きい、というように同じ向きに動く傾向があれば
は正になりやすく、共分散は正の大きな値になる。逆向きに動けば負、無関係ならゼロ付近になる。
ただし共分散の値は各変数のスケール(単位)に依存してしまい、大小をそのまま比べにくい。そこで各標準偏差 で割って
〜
に正規化したものが相関係数
である。
共分散にはコーシー・シュワルツの不等式 が成り立つので、両辺を
で割れば、
は必ず次の範囲に収まる。
… 完全な正の比例(片方が決まればもう片方も一意に決まる)
… 線形な関係がまったくない
… 完全な負の比例
両端の は「2変数が直線関係に退化する」極限であり、それより外側(
)はあり得ない。
では、この相関 を
から
まで実際に動かすと、2変数正規分布の形(等高線の楕円)がどう変わるかを見てみよう。

:完全な負の相関。点が直線
に完全に乗り、分布が直線につぶれる(共分散行列が特異になる)。
:右下がりの楕円が、だんだん丸くなる。
:等高線が真円。
を知っても
について何も分からない。完全に独立。
:右上がりの楕円が、だんだん細くなる。
:完全な正の相関。直線
につぶれる。
「傾き」と誤解しがちだが、つぶれ具合を表す。「傾き」は正負の2通りのみで、絶対値で楕円の「細さ」が変わるイメージだ。
両端()に近づくほど楕円が細くなる=片方を知れば、もう片方がほぼ確定することを表す。逆に中央(
)では円形で、片方を知っても何も分からない。
1-3. 条件付き分布 ―― 観測から残りを推測する
💡 ここが超重要:相関があるということは、「片方の値を知ると、もう片方の値が推測できる」ということだ。これがガウス過程回帰のすべての出発点である。
この「片方を知ると、もう片方が推測できる」を確率の言葉にしたのが条件付き分布である。
では、 の値を実際に観測したらどうなるだろうか? たとえば
だったとしよう。

赤い縦線()の上だけを見ると、
がどのあたりにありそうか、範囲がぐっと狭まるのが分かる。これが条件付き分布
である。記号の縦棒
は「〜を与えたとき(〜という条件のもとで)」という意味で、
は『
と分かっているもとでの
の分布』を表す。そしてこの条件付き分布もまた正規分布になる。
その条件付き分布を、横軸 の正規分布として描いたのが下の図である。観測前(
を知る前)の
の分布
(黒い点線)に比べ、
を観測した後の分布(赤)は、中心が右にずれ、山が鋭く尖っている=平均が移動し、ばらつき(分散)が小さくなっていることが分かる。

正の相関 があるので、「
が平均より大きい →
も平均より大きいはず」と予測される。実際、上の図の山(条件付き平均)は中心より右にずれている。具体的な式は次の通りだ(
のとき)。
ここで は1-2で出てきた期待値(平均)、
は分散(1-1で出てきた
、つまりばらつきの大きさ)を表す。
を入れると、条件付き平均は
、条件付き標準偏差
は
。観測前は分散1だったのが、観測後は分散
に縮んでいる。つまり「
を観測したことで
の不確かさが減った」わけだ。観測 → 条件付き分布で残りを絞り込む。これがそのまま「予測」になる。
1-4. 多変量正規分布への拡張
ここまでは2変数だったが、変数を一般の 個に増やしても話はまったく同じだ。2変数の正規分布を多次元に拡張したのが多変量正規分布で、平均ベクトル
と共分散行列
で決まる。
共分散行列 は「変数同士がどれくらい連動するか」を表す。
個の変数があるときは、
の行列になり、その
成分は次のように書ける。
- 対角成分
… 各変数
の分散(その変数単独の広がり)。
- 非対角成分
… 変数
と
の連動の強さ。
ここで注目してほしいのは、この非対角成分 が、1-1の2変数のときに出てきた
とまったく同じ形だということだ。つまり多変量正規分布の共分散行列は、この「2変数の話」を、すべてのペア
について並べて埋めただけなのだ。1つ1つの成分を見れば、やっていることは2変数のときと何も変わらない。そして多変量正規分布でも、一部の変数を観測すれば残りの条件付き分布(=予測)が正規分布として求まるという性質はそのまま成り立つ。
2. 前提知識2:回帰モデルの作り方
ここからは見方を変えて、もう1本の柱「重み空間ビュー」を準備する。第1章とは独立した話なので、いったん頭を切り替えてほしい。押さえるのは次の3つだ。
- 特徴空間での線形回帰(2-1) … 基底関数を使って、線形回帰のまま曲線を表す。
- カーネルトリック(2-2) … 特徴ベクトルを陽に計算せず、内積だけで回帰する技法。
- ガウシアンカーネル(2-3) … 代表的なカーネル。実は「無限個の基底を使った線形回帰」になっている。
2-1. 特徴空間での線形回帰
ふつうの線形回帰 は直線しか表せない。これではサインカーブのような曲線にはフィットできない。そこで、入力
をそのまま使うのではなく、いくつかの決まった形の関数
を用意し、その重み付き和で関数を表す。
この を基底関数、基底関数が張る空間を特徴空間と呼ぶ。普通の多項式も、
を基底関数とした特徴空間とみなすことができる。下の図のようなガウス・バンプ(あちこちに置いた小さな山)も基底関数としてよく使われる。ポイントは、
が重み
については相変わらず線形(1次式)だということ。だから「線形回帰」のままなのに、
のおかげで曲線を表現できる。

- 左:9個のガウス・バンプ基底
。それぞれ別の場所に山がある。
- 右:重み
をいろいろ変えて足し合わせた
。基底の重みを変えるだけで、いろいろな滑らかな曲線が作れることが分かる。
あとは、観測データに合うように重み を決めれば回帰の完成だ。
学習データ 個の特徴ベクトルを縦に積んだ行列を
とする(
行目が
、サイズは
)。まず、いちばん素朴な最小二乗で重み
を求めると、解は
となる。
これでも良いのだが、 が逆行列を持たないとゼロ除算のような問題が生じる。そこで、小さな正則化項
を足した最小二乗(リッジ回帰)で重みを決める。
次の2-2では、この特徴空間での線形回帰で実際に予測をしてみると、何が起こるかを見る。
2-2. カーネルトリック
2-1の特徴空間での線形回帰で、実際に新しい点 の出力を予測してみよう。すると、思いがけない事実が見えてくる。
2-1のリッジ回帰で求めた重み を使うと、
における予測値は次の式で与えられる。
ここで、線形代数の次の恒等式(push-through identity)を使ってみる。
左辺は の逆行列、右辺は
の逆行列で、両辺は厳密に等しい(行列サイズだけが
から
に入れ替わる)のがポイントだ。これを予測値に代入すると、こうなる。
ここで が登場するのは
と
の2か所だけだ。その中身を書き下してみると ――
なんと、 は必ず2つペアになった内積
の形でしか出てこないのだ。
が単独で残る場所はどこにもない。
つまり、予測を実行するのに必要なのは特徴ベクトルそのものではなく、2点の内積の値だけだった、というわけだ。それなら、この内積をいちいち 経由で計算するのはやめて、まとめて1つの関数(カーネル)として定義してしまおう。
これがカーネルトリックである。うれしいのは次の点だ。
を一つ一つ計算しなくても、内積
さえ計算できれば回帰ができる。
- だから基底の数
が巨大でも、いや無限大でも、
が有限の値で計算できるなら問題ない。
最後の点が決定的だ。無限次元の特徴空間を、計算上は有限サイズのカーネルの値だけで扱えてしまう。次章以降で見るように、ガウス過程回帰はまさにこの「無限次元を有限の計算で回す」仕掛けの上に成り立っている。
2-3. ガウシアンカーネル ―― 実は「無限個の基底」
2-2で「カーネル さえあれば、特徴ベクトルを陽に持たなくても回帰できる」ことを見た。では具体的なカーネルとして、いちばんよく使われるRBFカーネル(ガウシアンカーネル、別名 squared exponential)を見てみよう。
(length scale)… 関数の「滑らかさ」「変化の細かさ」を決める。大きいとなめらか、小さいとぐにゃぐにゃ。
… 関数の振れ幅(縦方向のスケール)。
と
を実際に動かすと、カーネルの形は次のように変わる。

- 左:
を大きくすると、離れた2点でもカーネル値(=相関)が大きく残る=広い範囲まで似た値を取る、なめらかな関数になる。
を小さくすると、少し離れただけで相関がすぐ0に落ちる=ぐにゃぐにゃした関数になる。
- 右:
はカーネルの高さ(=関数の振れ幅)だけを変え、横方向の広がり方は変えない。
直感的には、入力 と
が近ければカーネル値が大きく(=出力が強く相関し)、遠ければ小さくなる(=ほぼ無関係)という性質を表している。「近いものは似た値を取るはず」という素直な仮定だ(1-2の相関を思い出してほしい。カーネルは「2点がどれくらい相関するか」を与える関数である)。
正体は「無限個の基底」
このRBFカーネルは、いったいどんな基底関数 の内積なのだろうか。
として実際に展開してみる。
ここで指数関数をテイラー展開 すると、
つまりガウシアンカーネルは、
という無限個の基底関数の内積になっているのだ。和が から
まで走っていることに注目してほしい。これが下の図の各成分である。

(釣鐘型)、
(1回うねる)、
(2回うねる)… と、次数が上がるほど複雑な形になる。RBFカーネルを使うということは、この無限個の基底をすべて使った線形回帰をしているということだ。2-2のカーネルトリックのおかげで、無限個の基底を陽に扱わずに、有限の値
だけでそれを回せるわけである。
数値で確かめる:有限の内積が無限次元の極限でRBFになる
個の有限なランダム特徴(Random Fourier Features)の内積を足し合わせていくと、
を増やすにつれて確かにRBFカーネルへ近づいていく。その様子を数値で確認してみよう。下の図は、その内積をカーネルとして計算し、真のRBFカーネル(黒線)と重ねたものである。

:ぜんぜん合っていない(有限次元では再現できない)。
:かなり近い。
:黒線とほぼ完全に一致。
つまり RBF カーネルは有限個の基底の内積では決して厳密に表現できず、基底の数を無限に飛ばした極限としてのみ得られる。これが「ガウシアンカーネル=無限個の基底」という主張の数値的な裏付けだ。
まとめ:前提知識がそろった
第1章と第2章を振り返ると、ガウス過程回帰の材料はもうそろっている。
正規分布まわりの基礎(第1章)
- 複数の変数がまとめて正規分布に従う(=共分散行列で連動している)
- 一部の変数を観測する
- 残りの変数の条件付き分布(=予測)を計算する。これも正規分布で、平均(予測値)と分散(不確かさ)が綺麗な式で出る
回帰モデルの作り方(第2章)
- 基底関数の重み付き和でなめらかな関数を作る(特徴空間での線形回帰)
- カーネルトリックで、内積さえあれば無限次元の特徴空間でも計算できる
- ガウシアンカーネルは、実は無限個の基底を使った線形回帰になっている
ただし、ここまでの回帰モデルは重みを最小二乗で1つに決める、確率とは無縁の世界だった。次章では、この回帰モデルに第1章で準備した確率論を導入する。すると関数そのものが確率変数になり、ガウス過程回帰が出来上がる。
3. ガウス過程回帰のしくみ
ここからが本編だ。まず第2章の回帰モデルの重みに事前分布を置き、関数そのものを確率変数として表す(3-1)。この「関数の確率分布」がどんな性質を持つかを調べ、ガウス過程として定義する(3-2)。次に、有限次元のベイズ線形回帰で具体的に確認したうえで(3-3)、カーネルトリックを使って同じ結果をカーネルだけで解き直し(3-4)、最後にハイパーパラメータの学習(3-5)まで、一気に組み上げる。
3-1. 関数を確率変数として表す
私たちがやりたいのは回帰、つまり観測データから未知の関数 を求めることだ。ガウス過程の発想は思い切っていて、関数そのものを、1つに決まらないランダムな量(確率変数)として扱ってしまうというもの。具体的には、抽選を1回するたびに関数が1本まるごと出てくる、という状況を作る。難しそうに聞こえるが、実は2-3のガウシアンカーネルに、重みをランダムな値にするという考え方を組み合わせるだけで作れる。
2-3で、RBFカーネルは無限個の基底 を持つことを見た。この基底の重み付き和で関数を表し(2-1)、その重み
を1つの値に固定せず、確率分布として考える。
ではデータを見る前、重みはどんな分布だと考えればよいだろうか。まだ何のデータも得ていない段階では、各係数 がプラスかマイナスか、どのくらいの大きさかについて何の情報もない。そこで「どちらに偏るとも言えない(平均0)」「各重みは互いに独立で、ほどほどの大きさにばらつく(分散1)」という、いちばん素直な分布を事前分布とする。これをまとめて書くと、平均ベクトル
・共分散行列
(単位行列)のガウス分布だ。
重み がランダムなので、その和である関数
もまるごとランダムになる。サイコロを振る(
を1セット抽選する)たびに、関数が1本まるごと出てくる――これが「関数を確率変数として表す」ということだ。
2-1の右図で「重みをいろいろ変えて描いた曲線」は、まさにこの確率分布から関数を抽選したサンプルだった。
ここで「無限次元」の意味もはっきりさせておこう。ランダムなのは無限個の重み である。つまり、この「抽選するたびに関数が1本出てくるしくみ」の正体は、無限個の重み
が従う、無限次元のガウス分布
そのものにほかならない。
3-2. ガウス過程の定義
この「抽選するたびに関数が1本出てくるしくみ」がどんな性質を持つか調べよう。回帰で知りたいのは、結局いくつかの入力点での関数の値だ。そこで、任意の有限個の点 を選んで、関数値のベクトル
に注目する。各値は
という、ガウス分布に従う の線形変換である。ガウスの線形変換はまたガウスになるので、次のことが言える。
どんな有限個の点
を選んでも、関数値
は多変量正規分布に従う
その平均は0だ(3-1で置いた事前分布で、重み の平均が0だから)。共分散は、
どうしが独立・分散1であることを使って計算すると
――2-3で見た展開そのもので、ちょうどRBFカーネルの値になる。つまりカーネルとは「2点の関数値がどれくらい連動するか(共分散)」を与える関数だったのだ。1-2の相関の話を思い出してほしい。カーネルはまさに、共分散行列の各成分を生成する関数である。
この性質を持つ「抽選するたびに関数が1本出てくるしくみ」をガウス過程(Gaussian Process, GP)と呼び、次のように書く。
- 平均関数
… 各
での関数値の平均。ここでは
- カーネル関数(共分散関数)
… 2点
の関数値の共分散
ガウス分布が平均と共分散で完全に決まるのと同じように、ガウス過程もこの2つで完全に決まる。
無限次元なのに、なぜ計算できるのか
ランダムな重みは無限個(=無限次元のガウス分布)だった。計算不能に思えるが、実用上は心配いらない。私たちが本当に知りたいのは、手元の有限個の点(学習データと予測したい点)における関数値だけで、上で見たとおり、そこだけ見ればいつでも普通の(有限次元の)多変量正規分布になるからだ。しかもその共分散行列の成分は、無限個の基底を一切経由せずに、カーネルの値 として直接計算できる(2-2のカーネルトリック)。
つまり、あとは1-3〜1-4でやった「一部を観測して、残りを条件付き分布で絞り込む」に持ち込むだけである。実際の計算は3-4で行う。その前に次節では、ここまでの話を有限次元の具体例(ベイズ線形回帰)で確認しておこう。
3-3. 有限次元で確かめる ―― ベイズ線形回帰
3-1・3-2では、重み に事前分布
を置くことで、関数がガウス過程になることを見た。ここでは、その具体例として、有限次元の特徴空間で実際にベイズ線形回帰を行い、事前分布→事後分布→予測という流れを確認する。この結果は、3-4で見るガウス過程による予測と(カーネルトリックを通じて)一致する。
事前分布を用意したうえでデータ が得られたら、次の2つができる ―― (1) 重みの分布を「データを見た後」の姿に更新する(事後分布)、(2) それを使って新しい点の出力を予測する。順に見ていこう。
① データから重みの事後分布を求める
まず、観測のモデルを決める。観測値 は、特徴空間での線形回帰の値
に、避けられない観測ノイズ
が乗ったものだと考える。
ノイズが平均0・分散 のガウス分布なので、この式は「重み
を1つ仮に決めたとき、観測
がどれくらいの確からしさで得られるか」という確率
を与える。これを尤度(ゆうど)と呼ぶ(「
が与えられたときの
のもっともらしさ」という意味)。
次にベイズの定理を使う。これは「データを見る前の信念(事前分布)」を「データを見た後の信念(事後分布)」へ更新するための公式で、
と書ける( は「比例する」の意味。全体が確率1になるよう正規化するだけなので、形を追う分には比例で十分だ)。直感的には、最初の素直な事前分布
に、観測データの「裏付け」(尤度)を掛け合わせて、データと整合する重みへ絞り込む操作だ。この絞り込んだ結果
が事後分布である。
実際に計算すると(ガウス分布どうしの積はまたガウス分布になり、指数の肩を について平方完成すれば求まる。導出は付録Aを参照)、事後分布もきれいにガウス分布になる。
ポイントは、事前分布 が、データを見たことで平均
・共分散
のガウス分布へ更新されたということ(3-2で見た「平均0」の事前分布が、ここで初めて0でない平均を持つように更新される)。データが教えてくれた分だけ重みの不確かさ(
の広がり)も縮む。これがベイズ線形回帰における「学習」の中身だ。
② 新しい点の出力を予測する
事後分布さえ分かれば、新しい入力 での出力
も予測できる。
がガウス分布に従うので、その線形変換である
もガウス分布になり、平均と分散は次のようになる(ガウスの線形変換の公式
、
を当てはめるだけ)。
ここがベイズのうれしいところで、予測が1つの値ではなく「平均 ± 不確かさ」という分布で得られる。予測分散
がそのまま信頼区間の幅になり、データの少ない場所では自然と大きく(自信なく)なる。GPRが「自信のなさ」を出せるのは、この仕組みのおかげだ。
以上がベイズ線形回帰のすべてだ ―― 事前分布を置き → データで事後分布に更新し → 新しい点を分布として予測する。
3-4. カーネルトリックを使って解く
3-3の①②は、有限次元の特徴ベクトル を陽に使って重みを経由する重み空間ビューでの予測だった。カーネルトリックもそのまま使える。 3-3の予測平均をよく見ると、2-1のリッジ回帰にあった正則化項
がちょうど観測ノイズの分散
に置き換わっただけで、数式の骨格はまったく同じだ。だから同じ push-through 恒等式で変形でき、やはり
は内積の形でしか現れない(予測分散も
が2つペアで現れる形なので同様)。最小二乗(点推定)でもベイズ(分布)でも、特徴ベクトルは内積=カーネルとしてしか効かない。この事実のおかげで、ここからは特徴空間
を一切忘れて、カーネル
だけでベイズ的な回帰(=ガウス過程回帰)を組み立てられる。つまりここからは、3-3の①②と数学的に同じ結果を、重み
を経由せずカーネルだけで導く関数空間ビューを見ていく。
設定
学習データ があるとする。
: 入力
: 観測値(ノイズを含む)
観測にはノイズが乗っているとする。
ここで新しい点 における出力
を予測したい。
同時分布を書く
ガウス過程の性質から、観測値 と予測したい値
はまとめて多変量正規分布に従う。
ここで は学習点同士のカーネル値を並べた
の行列だ。
条件付き分布が予測になる
「観測 が分かっている」という条件のもとで
の分布を求める=条件付き分布を計算する。1-3でやった「
を観測して
を絞り込む」のと、まったく同じ操作だ。多変量正規分布の条件付き分布の公式から、答えもまた正規分布になる。
予測平均:
予測分散:
この2本がGPRの核心だ。
- 予測平均は、観測値
の重み付き和になっている(カーネルが「近い学習点ほど重く効く」重みを与える)。
- 予測分散は、学習データから離れた点ほど大きくなる。つまりデータのない場所では「自信がない」と分散が膨らむ。
これが冒頭で述べた「不確かさを出せる」という最大の魅力だ。1-3の「観測後は分散が縮む」という話の、そのまま無限次元版だ。
3-5. ハイパーパラメータの学習
カーネルには といったハイパーパラメータ
がある。これらは周辺尤度(marginal likelihood)の対数を最大化して決めるのが定石だ。
ただし 。
この式は2つの項のバランスで成り立っている。
- 第1項
… データへの当てはまりの良さ
- 第2項
… モデルの複雑さへのペナルティ
つまり周辺尤度の最大化は、過学習を自動的に抑えながら最適なパラメータを選んでくれる(オッカムの剃刀が自然に働く)という、ベイズ的に美しい性質を持つ。
4. Pythonで動かしてみる(scikit-learn)
理屈が分かったら手を動かすのが一番だ。scikit-learn なら数行で試せる。
import numpy as np import matplotlib.pyplot as plt from sklearn.gaussian_process import GaussianProcessRegressor from sklearn.gaussian_process.kernels import RBF, ConstantKernel, WhiteKernel # --- 真の関数とノイズ付き観測データ --- def true_f(x): return np.sin(x) + 0.3 * x rng = np.random.default_rng(0) X_train = np.sort(rng.uniform(0, 10, 8)).reshape(-1, 1) y_train = true_f(X_train).ravel() + rng.normal(0, 0.2, X_train.shape[0]) # --- カーネル定義:振幅 * RBF + 観測ノイズ --- kernel = ConstantKernel(1.0) * RBF(length_scale=1.0) + WhiteKernel(0.1) gpr = GaussianProcessRegressor(kernel=kernel, normalize_y=True, n_restarts_optimizer=10) gpr.fit(X_train, y_train) # --- 予測(平均と標準偏差を同時に取得)--- X_test = np.linspace(0, 12, 300).reshape(-1, 1) y_mean, y_std = gpr.predict(X_test, return_std=True) # --- 可視化 --- plt.figure(figsize=(9, 5)) plt.plot(X_test, true_f(X_test), "k--", label="true function") plt.scatter(X_train, y_train, c="red", zorder=5, label="observations") plt.plot(X_test, y_mean, "b", label="predictive mean") plt.fill_between(X_test.ravel(), y_mean - 1.96 * y_std, y_mean + 1.96 * y_std, alpha=0.2, color="blue", label="95% confidence interval") plt.legend(); plt.title("Gaussian Process Regression") plt.show() print("学習されたカーネル:", gpr.kernel_)
実行すると、ブログ冒頭に示したグラフが得られる。
観測点の近くでは信頼区間が狭く、データのない右端(外挿領域)では信頼区間が大きく広がる様子が見える。これこそGPRの真骨頂だ。
ちなみに上の例で学習されたカーネルは次の通りだった。
0.939**2 * RBF(length_scale=1.62) + WhiteKernel(noise_level=0.0408)
length scale ≈ 1.62、観測ノイズ ≈ 0.041 と、データから自動的に妥当な値が推定されている。
5. まとめ:長所・短所と使いどころ
最後に、ガウス過程回帰の長所・短所、使いどころ、そして記事全体の振り返りをまとめる。
長所と短所
長所
- 予測の不確かさを定量化できる(信頼区間が出る)
- データが少なくても機能する(少数データに強い)
- カーネルを通じて事前知識(滑らかさ・周期性など)を柔軟に組み込める
- ハイパーパラメータが周辺尤度で原理的に決まる
短所
- 計算量が
(共分散行列の逆行列計算)。データ数
が数千を超えると重い。
- 高次元入力では性能が落ちやすい(カーネルの距離が意味を失う)
- カーネル選択がモデルの性能を大きく左右する
※ 大規模データには、補助点を使う Sparse GP(誘導点法) や、SVGPなどの近似手法が使われる。
どんな場面で使う?
- ベイズ最適化 … ハイパーパラメータ探索や実験計画。「次にどこを試すべきか」を不確かさに基づいて決める用途で大活躍。
- 時系列・空間データの補間(クリギングは地統計学版のGPR)
- 少数データでの代理モデル(サロゲートモデル) … 計算コストの高いシミュレーションの代替
全体の振り返り
- 土台は2つ。正規分布まわりの基礎(第1章:正規分布→共分散→条件付き分布→多変量)と、回帰モデルの作り方(第2章:特徴空間での線形回帰→カーネルトリック→無限個の基底)。
- この回帰モデルに確率論を導入し(重みを確率分布にする)、無限個の基底の重み付き和にランダムな重みを入れたものが「確率変数としての関数」。これがガウス過程で、カーネル関数が関数の滑らかさや相関(共分散)を決める。
- つまりガウシアンカーネルを使ったGPRは、無限個の基底によるベイズ線形回帰=無限次元のガウス分布上の推論を、有限のカーネル行列だけで実行している。
- 回帰は多変量正規分布の条件付き分布を計算するだけ。予測平均と予測分散が綺麗な式で出る。
- 最大の魅力は予測の不確かさを定量化できること。
- 計算量
がネックだが、少数データ・ベイズ最適化では非常に強力。
数式は多いが、本質は「正規分布の条件付き分布を取るだけ」だ。一度コードを動かして、信頼区間がデータの密度に応じて伸び縮みする様子を体感すると、一気に腑に落ちるはずだ。
参考文献
- C. E. Rasmussen & C. K. I. Williams, Gaussian Processes for Machine Learning, MIT Press, 2006.(無料公開PDF)
- 持橋大地・大羽成征『ガウス過程と機械学習』講談社
付録A:事後分布の導出(平方完成)
3-3で「指数の肩を について平方完成すれば求まる」とした計算を、ここで丁寧に追う。
出発点:事前分布と尤度の指数部分を書き出す。
事後分布はこの2つの積に比例するので、指数部分を足し合わせる。
ステップ1: について展開する
指数の中身( の
部分)を展開する。
これは の2次の項+1次の項+定数という形になっている。ここで
とおくと、指数の中身は という単純な形になる。
ステップ2:平方完成する
「2次+1次+定数」の形は、平方完成の公式
を使って、 を含む部分を「ちょうど正規分布の指数の形」
にまとめられる。最後の項
は
を含まないので、比例定数に吸収してよい。
ステップ3:係数を読み取る
したがって事後分布は
という、まさに正規分布 の形になっており、
(最後の等式は の
が約分されて出てくる)。これが3-3の式とちょうど一致する。























































