はじめに
前回の記事では、特定の分布や関係を仮定せず、与えられたデータに柔軟に対応することのできるモデルということで、ガウス過程回帰について取り上げました。
本記事ではガウス過程をさらに深堀りし、Stanなどでガウス過程を自在に扱うための土台を固めたいと思います。
本記事の構成は以下の通りとします。
特に以下2章は力を入れました。
- 「ガウス過程潜在変数モデル」 Stan等でガウス過程を様々なモデルに活用するために不可欠
- 「カテゴリカルな変数を用いたカーネル」 質的変数が入力に含まれる場合にも、ガウス過程を適用できるようにするための方法を説明
当初本記事と次回の記事はひとつの記事として公開していましたが、余りにも長すぎる記事だったので、二つに分けました。
ガウス過程の導入
まず、ガウス過程を用いたモデルについて一般化します。
入力の要素数を数を
ガウス過程モデルの一般式は以下になります。
ここで
各入力の誤差項が同じ標準偏差
上式では
各入力の標準偏差を
となります。
ガウス過程では、カーネル関数によって
ガウス過程潜在変数モデル
多変量正規分布のサンプリング
平均0、分散共分散行列
を満たす行列
次に、標準正規分布からの乱数
に
となります。
このことから、
ガウス過程潜在変数モデルとは
モデルの残差
となります。(
Stanでの実装
以下、Stanマニュアルを引用してLatent variable GPの実装について軽く触れておきます。
Latent variable GPのStanでの実装は以下のようになります。
data{
int<lower=1> N;
real x[N];
vector[N] y;
}
transformed data{
real delta = 1e-9;
}
parameters {
real<lower=0> rho;
real<lower=0> alpha;
real<lower=0> sigma;
vector[N] eta;
}
model {
vector[N] f;
{
matrix[N, N] L_K;
matrix[N, N] K = cov_exp_quad(x, alpha, rho);
// diagonal elements
for (n in 1:N)
K[n, n] = K[n, n] + delta;
L_K = cholesky_decompose(K);
f = L_K * eta;
}
eta ~ std_normal();
y ~ normal(f, sigma);
}
ここで、K = cov_exp_quad(x, alpha, rho)
はガウスカーネルをつくる便利な関数で、
を要素に持つカーネル行列
また、for (n in 1:N) K[n, n] = K[n, n] + delta;
とすることで、カーネル行列の対角要素に微小な値を加えていますが、こうすることでカーネル行列の逆行列の計算を安定化させています。また、コレスキー分解はその対象が正定値行列であることが必須ですが、対角要素に微小量を加えることで、その行列が正定値行列であることを保証することができます。
式L_K = cholesky_decompose(K);
、eta ~ std_normal();
、f = L_K * eta;
と指定しています。
上のコードでは、残差ではなく出力y ~ Normal(f, sigma)
とすることで、平均
例えば、0か1のみをとる出力
と表現でき、これをStanで実行する場合、以下のようになります。
data{
int<lower=1> N;
real x[N];
vector[N] y;
...
}
parameters{
real mu; //muはpの期待値 観測データが近くに無い場合に漸近する値
...
}
transformed parameters{
vector[N]<lower=0, upper=1> p;
...
p = mu + f;
...
}
...
model {
mu ~ std_normal()
...
y ~ bernoulli(p);
}
ガウス過程の予測分布
ガウス過程モデルにおいて、入力
ここで、
カテゴリカルな変数を用いたカーネル
前回記事も含めこれまでは連続型変数を扱うことを前提にしていましたが、連続的な値をとらず、絶対的な大小関係ももたない質的変数(カテゴリカルな変数)が入力に含まれる場合、量的変数と質的変数の両方の性質を考慮した空間を定義することのできるカーネルを設定する必要があります。しかし、質的変数には「距離」の概念が無いため、ガウスカーネル等のように、各入力の「近接性」を再現するカーネルで対応することはできません。では、どのようにカーネル関数を設定すればよいのでしょうか。
質的変数が1つの場合
まず、量的変数と質的変数を含んだ入力を
としておきます。
簡略のため、
と定義します。すると、量的変数については
と推定することにします。
ここで、
また、
とし、
すると、
(
が成り立ちます(
ここで、
と、
以降、この性質をもつ行列をPDUDEと書きます。
以上のことから、
は、質的変数と量的変数の影響を考慮することのできる相関関数ととらえることができます。
質的変数が2つ以上の場合
一般的なケースとして、
ここで、
特に、
式
モデリングにおいては、
制約のあるPDUDE
前節では、PDUDEについて制約を設けない相関行列を用いていました。柔軟なモデリングにおいてはこれで問題ないのですが、質的変数が順序尺度であったり、カテゴリカルな変数であったりするということがあらかじめ自明な場合は、PDUDEに制約を持たせることで、その情報をモデルに反映させることができます。ここでは、sesがカテゴリカルな変数であることから、質的変数がカテゴリカルな場合にPDUDEに設ける制約について説明します。
結論からですが、
このとき、任意の
上記の
ここで、
式
となります。よって、対数スケールにおいて、量的変数についてはL2距離を、質的変数については0~1の値をとる距離を使用していることが分かります。
以上、カテゴリカルな変数を用いたカーネルについて説明しました。参考文献はこちらになります。制約のあるPDUDEについては、今回紹介したもののほかにも順序尺度に対するPDUDE,グループ相関に対するPDUDE等紹介されています。
まとめ
今回はガウス過程みまつわる理論を深堀りしてみました。ガウス過程潜在変数モデル、カテゴリカルな変数への対応の2点が重要です。ここで紹介した内容は、次回の記事で実際のデータへ応用し、期待通り機能することを確かめたいと思います。