このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

線形回帰とゲルファント変換

線形回帰〈linear regression〉とは、未知の線形写像を、幾つかの入力とそれに対する出力の組合せから推定する手法です。

例えば、中学校で習う1次関数 f(x) = ax + b に対して、2つの異なる入力x1とx2を渡して、その値を見ます。

  • y1 = f(x1) = ax1 + b
  • y2 = f(x2) = ax2 + b

この状況で、x1, x2, y1, y2 はすべて定数となるので、a, bを未知数として連立1次方程式を解けばa, bが求まります。つまり、未知の1次関数fが確定します。

1次関数に確率的な揺らぎeが加わるならば、次の形になります。

  • f(x) = ax + b + e

eは揺らぎ(法則的不確実性)を表す確率分布です。この場合は、同じ値をfに複数回入力するとき、試行の度に出力が変わるかもしれません。単純に連立方程式を解くだけでなく、なんらかの工夫が要求されます。その工夫や具体的な解き方が線形回帰の話題となります。

線形回帰の変数が増えて枠組みが一般的になると、話がややこしくなります。このややこしさの原因は次のようなものでしょう。

  1. 行列計算を使うので、たくさんの添字や総和記号Σが矢鱈に登場して煩雑になる。
  2. 変数、関数、定数、既知、未知などの区別が分かりにくくなる。

そこで、行列計算を使うのをやめます。ベクトル空間をまるのまま使い、いちいち基底を設定して行列表示することはしません。成分(座標)表示をしないので抽象的になりますが、表示はスッキリします。

また、出現する記号の型を明示することにより、変数、関数、定数、既知、未知などの区別をハッキリさせます。特に、 計画行列(design matrix)と呼ばれるモノをゲルファント変換(Gelfand transform)により位置づけます。計画行列の意味がハッキリすれば、付随するその他の概念もハッキリします。

内容:

ベクトル空間の直和、直積、指数、双対

線形代数からの準備をします。ベクトル空間のスカラー体(係数体、基礎体)は常に実数体Rだとします。また、有限次元のベクトル空間だけを考えます。

V, Wがベクトル空間として、直和はV\oplusWと書きます。ベクトル空間の場合は、直和は直積でもあります; V\oplusW = V×W。以下では、直和記号\oplusと直積記号×の両方を使います。もちろん、直和と直積は実体としては同じ(同一じゃないにしても同型)ですが、その使われ方により区別します。どのように区別するかを詳しくは述べませんが、以下の記述における使い分けに注意してもらえればそれで十分です。

Xをもうひとつのベクトル空間として、f:X→V、g:X→W に対して、 ペア <f, g>:X→V×W を次のように定義します。

  • <f, g>(x) = (f(x), g(x)) (x∈X, f(x)∈V, g(x)∈W, (f(x), g(x))∈V×W)

ペア<f, g>の余域(写像の行き先)となるベクトル空間は、VとWの直積とみなしてV×Wと書きます。

一方、h:V→X、k:W→X に対して、 コペア [h, k]:V\oplusW→X を次のように定義します。

  • [h, k]((v, w)) = h(v) + k(w) (v∈V, w∈W, h(v), k(w)∈X, (h(v) + k(w))∈X)

コペア[h, k]の域(写像の根本)となるベクトル空間は、VとWの直和とみなしてV\oplusWと書きます。

2個のベクトル空間を一般化してn個のベクトル空間 V1, ..., Vn を考えます。もうひとつのベクトル空間Xがあり、n個の線形写像 f1:X→V1, ..., fn:X→Vn があると、 タプル <f1, ..., fn>:X→V1×...×Vn を定義できます。また、n個の線形写像 h1:V1→X, ..., hn:Vn→X があると、 コタプル [h1, ..., hn]:V1\oplus...\oplusVn→X を定義できます。n = 2 のときのタプル/コタプルが、ペア/コペアです。

ベクトル空間V、Wの要素 v∈V、w∈W に対して、v, wのスカラー倍を考えれば v:R→V、w:R→W という線形写像とみなせます。よって、ペア記法 <v, w>:R→V×W が意味を持ちます。R→V×W である線形写像は、V×Wの要素と同一視できるので、<v, w>∈V×W とも見なします。これにより、要素のペアと写像のペアを同じ記法で書いても問題ありません。タプル <v1, ..., vn> に対しても同様な解釈をします。

2つのベクトル空間VとWに対して、VからWへの線形写像の全体を、VとWの 指数(exponential)と呼び、実際に指数(ベキ)の記号WVで表します。線形写像の足し算とスカラー倍は自明な方法で定義できるので、WVは常にベクトル空間とみなします。Vの次元がp、Wの次元がqならば、指数WVの次元はp×qです(qpではありません)。

上付きの記法WV入れ子になると書きにくいので、WVの代わりに[V, W]も使います。ブラケット記号はコタプルと記号がかぶっているし、その他の用途でもブラケットが使われる点では具合が悪いのですが、指数の意味のブラケットはよく使われています。記号のオーバーロードなので、文脈に依存した意味の判断が必要になります。

W = R の場合の指数 RV = [V, R] をVの 双対ベクトル空間と呼びます。Vの双対ベクトル空間はV*とも書きます。f:V→W があると、ψ∈W* に対して、f*(ψ) := f;ψ (fの後にψを結合)として、f*:W*→V* が定義できます。

後で使うことはないですが(脇道の話)、ベクトル空間のテンソル積を使うと、WV = [V, W] = \stackrel{\sim}{=} W\otimesV* となります。つまり指数は、双対とテンソル積の組合せで書けます。

試行、実験、計画入力列

線形回帰では、冒頭に出した1次関数 f(x) = ax + b のように、定数項bがある写像(アフィン線形写像)を取り扱います。しかし、アフィン線形写像を普通の線形写像(斉次(homogeneous)な線形写像)に帰着させる方法があるので、普通の線形写像だけを話題にします。

VとWをベクトル空間として、f:V→W を線形写像とします。いま、fがブラックボックスとして与えられているとします。fが線形写像であることは分かっていますが、どんな線形写像かは未知です。Vの要素vを選んで、fに入力として渡して、その出力w∈Wを観測記録して、それを分析すればfの構造をある程度は予測できるでしょう。

入力となる v∈V を選んでブラックボックスに放り込み、その出力である w∈W を観測記録する行為を 試行と呼びます。試行の繰り返しを 実験と呼ぶことにします。実験によりブラックボックスであるfの中身を推定します。

確率的な揺らぎがないなら、試行回数nを十分に多くすれば、確実にfを特定できます。fを行列表示した時の全ての成分を間違いなく確定できます。fの出力に確率的な揺らぎが混じると、100%確実にfを特定することは出来ませんが、一番それらしい線形写像を推定することは出来ます。

いずれにしても、実験をしてその結果を記録しないと始まりません。実験にはn回の試行が含まれるとして、前もって各試行に使う入力 x1, .., xn を決めておきます。x1, .., xn はfへの入力に使うのでベクトル空間Vの要素です; x1∈V, .., xn∈V 。

実験におけるn回の試行の入力のために用意されたベクトルの列 x1, .., xn計画入力列と呼びます。ベクトルの列を行列で表現した上で、 計画行列と呼ぶのが普通ですが、行列表現/行列計算を使わないので、「入力列」としました。計画入力列は、Vの要素を並べたもので、文字通り「前もって計画された実験用入力の列」です。

ゲルファント変換

線形写像fを推定する枠組みを作るときに、関数、変数、定数、未知、既知などの区別で混乱しがちです。よく使うf(x)という記法の解釈が転倒するのです。f(x)という書き方に対する暗黙の了解は:

  1. fは関数である。
  2. xは変数である。
  3. fは既知である。

ところが、未知関数を推定するときは次のようになります。

  1. fは変数である。
  2. xは定数である。
  3. fは未知である。

通常の解釈がひっくり返ります。このことを明示的に扱うために ゲルファント変換を導入します。ゲルファント変換とは、「関数の引数を、『関数を引数とする関数』とみなす」ことです。これだけじゃワケワカンナイですね。

f:V→W が線形写像で、xがVの要素のとき、f(x) を次のように解釈します。

  • xを選んで固定する。
  • fは色々と動かす。
  • f(x) は、fを動かすごとに変わる(しかし、xはずっと動かさない)。
  • 変化するfに対して、Wの値を対応させる写像ができる。
  • その写像は、選んで固定したxで決まる。

「f:V→W が線形写像」と仮定しておいたので、fが動く範囲は指数ベクトル空間 WV = [V, W] です。選んで固定したxに対応する写像をξと書くと、ξは引数を[V, W]から取り、Wの値を返します。つまり、ξ:[V, W]→W。ξの具体的な定義は、

  • ξ(f) := f(x)

このξの定義は、「関数の引数xを、『関数fを引数とする関数ξ』とみなす」ことになっています。ξはxから決まるので、x^と書くのが習慣です。すると:

  • x^(f) := f(x)

x∈V に対して x^:[V, W]→W、つまり x^∈[[V, W], W]。よって、x|→x^ という対応は、V→[[V, W], W] となります。この高階の写像 G = (-)^:V→[[V, W], W] がゲルファント変換Gです。特定の x∈V に対する G(x) = x^ のことも「xのゲルファント変換」と呼びます。x^を、「xによる評価写像」「xによる求値写像」と呼ぶこともあります。

ゲルファント変換の特別な場合として、W = R のときを考えてみましょう。x∈V に対して x^:[V, R]→R です。[V, R]はVの双対ベクトル空間だったので、x^:V*R で、u∈V* に対して、x^(u) = u(x)。

x^ は[V*, R]に入るので、ゲルファント変換Gは、G:V→[V*, R]。この[V*, R]は「双対ベクトル空間V*の双対ベクトル空間」で、 二重双対ベクトル空間と呼びます。ゲルファント変換は G = (-)^:V→(V*)* とも書けて、もとの空間Vからその二重双対ベクトル空間 V** = (V*)* への埋め込み(単射線形写像)となります。有限次元ベクトル空間においては、ゲルファント変換は同型となり、V\stackrel{\sim}{=}V** と、二重双対ベクトル空間がもとの空間に(事実上)戻ることになります。

計画入力列とゲルファント変換

x∈V を選んで固定すると、xのゲルファント変換 x^:[V, W]→W が決まります。n個の要素 x1, ..., xn を選ぶならば、n個のゲルファント変換が決まります。

  • x1^:[V, W]→W、x1^(f) = f(x1)
  • x2^:[V, W]→W、x2^(f) = f(x2)
  • xn^:[V, W]→W、xn^(f) = f(xn)

これらのn個のゲルファント変換をタプルにまとめると、

  • <x1^, x2^, ..., xn^>:[V, W]→Wn、<x1^, x2^, ..., xn^>(f) = <f(x1), f(x2), ..., f(xn)>

計画されたn個の入力の列を計画入力列と呼んだので、「計画入力列が線形写像 [V, W]→Wn を定める」と言えます。

記法の簡略化を図るために、Vの要素をn個並べたモノを x = <x1, ..., xn> と書きます。この例のように、ベクトル空間を直積した空間の要素は太字で表すことにします。「ベクトルのベクトル」と言ってもいいのですが、「ベクトル」という言葉が多用されると何を意味するか混乱してくるので、 シーケンスと呼びます。太字で表すのはシーケンスに限り、単なるベクトル(VやWの要素)には太字を使いません。シーケンスの長さがnであるとき、 n-シーケンスとも呼びます。

さて、Vの要素のn-シーケンス x = <x1, ..., xn> に対して、

  • x^ = <x1, ..., xn>^ = <x1^, ..., xn^>

と書けると都合がいいのですが、この記法はツジツマがあいませんx∈Vn なので、xのゲルファント変換x^は、適当なベクトル空間Yに対して、[Vn, Y]→Y の形でなくてはなりません。Y = W と置いてみても、[Vn, W]→W となり、n ≠ 1 では <x1, ..., xn>^ = <x1^, ..., xn^> が成立するはずがないのです。

不合理な記号法は使いたくないので、別な記号「^^」を導入して、

  • x^^ = <x1, ..., xn>^^ = <x1^, ..., xn^>

とします。

記号x^^は約束ごとだと思えばそれでいいのですが、上付き「^^」の意味を探っておきましょう。この詮索はオマケであり、話の本筋ではありません。スキップしても後に影響はありません。

f∈[V, W] に対して、fのn回繰り返しにあたる写像をf(n)とします。具体的には、

  • f(n)(<v1, ..., vn>) = <f(v1), ..., f(vn)>

この定義を見れば分かるように、fからf(n)を作る操作は、シーケンス(タプル)に関するマップ高階関数になっています。(f:V→W) |→ (f(n):Vn→Wn) という対応を考えて、Δn(f) = f(n) とすると:

  • Δn:[V, W]→[Vn, Wn]

圏論の言葉で言うなら、Δnは「直積に関してn乗する関手」の射部分(morphism part)です。より正確には、関手の射部分を指数[-, -]を使って表現したものです。

Δn(f) = f(n) を使って x^^(f) を書くと:

  • x^^(f) = x^(f(n))

これより、

  • x^^ = Δn;x^

上付き「^^」は、Vのn-シーケンスxから線形写像 x^^:[V, W]→Wn を作り出す操作なので、(-)^^:Vn→[[V, W], Wn] です。

記号の意味を詮索して、その型を突き止めるのはシチメンドクサイと感じるかもしれませんが、「関数、変数、定数」などの区別をハッキリさせる効果があります。

パラメータ空間、観測空間、推定空間、誤差空間

長さがnの実験入力列 x = <x1, ..., xn> があると、それにより線形写像 x^^ = <x1, ..., xn>^^ = <x1^, ..., xn^>:[V, W]→Wn が定まるのが分かりました。この線形写像x^^が線形回帰の枠組みを構成する最も重要な要素です。

線形写像 x^^:[V, W]→Wn の域であるベクトル空間[V, W]は パラメータ空間と呼ばれることがあります。それは、[V, W]の要素を行列表示したp×q個のスカラー達を未知のパラメータとみなすからです(p = dim(V), q = dim(W))。W = R のケースが多いので、そのときのパラメータ数はp個です。

線形写像 x^^:[V, W]→Wn の余域であるベクトル空間Wn観測空間と呼びます。n回の試行からなる実験において観測されるWのn-シーケンスの全体がWnなので、そう呼ばれるのです。n = 1 のときは例外ですが、観測空間の要素はn-シーケンスであり、単一のベクトル(Wの要素)ではありません。

線形写像 x^^:[V, W]→Wn の像(イメージ)空間Im(x^^)は 推定空間と呼びます。定義から、推定空間は観測空間Wnの部分空間であり、とある f∈[V, W] に対する <f(x1), ..., f(xn)> の形のn-シーケンス達から構成される部分ベクトル空間です。

もし、観測されたシーケンスに誤差(確率的なゆらぎ)がないのなら、そのシーケンスは推定空間に入るはずです。そして、推定空間に入った観測シーケンスにはそのシーケンスを生成した線形写像f(パラメータ空間[V, W]の要素)が見つかります(fが一意的に決まる保証はないが)。

ここで言う誤差は、出力の観測装置の誤差だけを意味するものではありません。入力 x∈V と線形写像 f∈[V, W] 以外で出力に影響しそうなモロモロをすべて「誤差」という言葉に含めています。

観測されたシーケンスが推定空間に入らないとき、はみ出した分は誤差による影響と考えます。誤差をキチンと計るためは、Wnに計量構造が必要です。Wが内積空間であると仮定して、内積を (w|z) (w, z∈W)のように書きます。Wの内積に基き、観測空間Wn内積を入れます。2つのシーケンス w = <w1, ..., wn> と z = <z1, ..., zn> に対して、

  • (w|z) := (w1|z1) + ..., + (wn|zn)

これで観測空間Wn内積空間になったので、観測シーケンス(Wnの要素)のノルムや、2つの観測シーケンスの角度を問題にできます。観測シーケンスの直交性とかピタゴラスの定理も定式化できます。また、観測空間Wnの部分ベクトル空間Xには、直交補空間Xが定義できます。

以上のように観測空間に計量構造(内積)を入れた上で、推定空間Im(x^^)の直交補空間(Im(x^^))誤差空間と呼びます。この定義から、観測空間は推定空間と誤差空間に直和分解されます。

  • Wn = (Im(x^^))\oplus(Im(x^^))

実験入力列についてもう一度

未知の線形写像fは[V, W]の要素です。これは与えられるものだとすると、我々にfを選ぶ権利はありません。制御可能/計画可能なのは、fに与える入力の列 x1, ..., xn です。これらの入力達に対するn回の試行により長さnの観測値シーケンス y1, ..., yn が得られて、それをもとに推定を実行します。

試行の回数nと入力の列 x1, ..., xn をヘタに選ぶと、推定がうまくいきません。例えば、nが十分大きくても、すべて同じ入力 x1 = a, ..., xn = a としてしまえば、観測結果はfに関する情報を与えてくれません(確率的な揺らぎを調べることはできます)。

nと x1, ..., xn をどう選ぶべきか、x1, ..., xn と y1, ..., yn から、未知のfをどうやって(具体的に)計算するか、といったことが線形回帰の実質的な内容になります。

ここでは実質的な内容である「どうやって」計算するかに全く触れてませんが、「何を」計算するのかについては述べました。行列計算の羅列のなかで、いったい何やっているのかと迷子になってしまったときは、線形写像 x^^:[V, W]→Wn と、その像空間/直交補空間のことを思い出すといいかと思います。