PRMLに数学で一歩踏み込む -平面の方程式から識別関数の理解-

# 目的

　線形識別関数

```math
\begin{equation}
y(\mathbf{x}) = \mathbf{w}^T \mathbf{x} + w_0 \tag{4.4}
\end{equation}
```

を平面の方程式と照らし合わせて、線形代数の知識を用いて理解すること。
(文中の式番号はPRMLの式番号と対応。$\mathrm{Ann, Bmm}$といった式番号はこの記事内でのみ参照する番号。)

# はじめに

### PRMLで数学が詳しく説明されない問題

　AIブーム・データサイエンスブームによって統計学や機械学習の勉強の意欲が高まっているITエンジニアは増えてきているはずです。
そして機械学習・パターン認識を学ぶために機械学習のバイブルPRML([Patten Recognition and Machine Learning パターン認識と機械学習　上/下](https://www.amazon.co.jp/%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E8%AA%8D%E8%AD%98%E3%81%A8%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92-%E4%B8%8A-C-M-%E3%83%93%E3%82%B7%E3%83%A7%E3%83%83%E3%83%97/dp/4621061224))を手に取る方がいらっしゃると思います。
私もその一人です。

　ただ、こちらのPRMLですが機械学習理論の説明に特化しており、その過程で必要となる数学・統計学・情報処理・物理数学など様々な数学的基礎はほとんど説明されておりません。
(紙面の都合上仕方ないことですが、、、)
そのため、なかなか読み進められず、また結論が得られた風に書かれていても得られた数式が意味することは何なのか理解しにくく読んだ甲斐がなくなってしまいます。
少なくとも私は困りました、、、orz

### 狙い

　この記事では私がPRMLで勉強していて悩んだポイントや、数学的に考えて分かったこと・気づいたことを整理してお伝えします。
自分の学習内容の整理が基本ですが、こうやってアウトプットすることで同じような悩みを持つ方々のお役に立てられれば幸いです。
(プログラミングから外れているのでQiitaとして不適切かもしれません。より良いブログサービスが見つかればそちらに移ろうと思います。)
気力が続けばシリーズ化しようと思います。

　私自身は大学院物理学専攻出身で、機械学習はおろか情報処理も門外漢です。
(研究上の実務として実験データの分析は行っていましたが。)
誰かにレビューしてもらっているわけでもないので、間違っていることを書くこともあると思います。
むしろ誤りがありましたらコメントいただけると大変嬉しいです。

### 想定する読者

　機械学習・数学に慣れていない方を対象として丁寧に数式を追って記述いたしました。
機械学習・数学のベテランの方々にはくどい内容かもしれません。

# 基本的知識
### 超平面の方程式
　平面の方程式は日本語版PRML上巻179ページ4.1.1節「2クラス」で少しだけ出てきます。
下記の線形識別関数がまさに(超)平面の方程式です。

```math
\begin{equation}
y(\mathbf{x}) = \mathbf{w}^T \mathbf{x} + w_0 \tag{4.4}
\end{equation}
```

この($4.4$)式は高校数学や大学の教養数学(線形代数)で扱った直線もしくは平面を示す1次方程式の拡張です。
そのため、3次以上の次元も含むという意味を込めて「『超』平面」と言います。

　２次元において直線の方程式は、

```math
\begin{equation}
ax + by +c = 0 \tag{A1}
\end{equation}
```

ここで、$(a, b) \neq (0, 0)$です。

　また、3次元において平面の方程式は

```math
ax + by + cz +d = 0 \tag{B1}
```

ここで、$(a, b, c) \neq (0, 0, 0)$です。

　これら($\mathrm{A}1$)・($\mathrm{B}1$)式が本当に直線・平面なのか想像するのが苦手という方ももしかするといらっしゃるかもしれません。
後ほど図解しますのでひとまず読み進めてください。

　($4.4$)式と($\mathrm{A}1$)・($\mathrm{B}1$)式を見比べてください。
($4.4$)式の右辺を左辺に移動させて内積$\mathbf{w}^T \cdot \mathbf{x}$を多項式に展開して、各項の係数の符号を調整したら同じ形をしています。
(符号は違いますがそれは係数に含めればいいだけの問題なので気にしないでください。)

```math
\begin{equation}
- w_1 x_1 - w_2 x_2 - \cdots + y - w_0 = 0
\end{equation}
```
　
　PRMLの本文では唐突に$y(\mathbf{x})$が識別関数だと言われるのですが、これは上述の通り正体は直線・(超)平面の方程式のことです。
そしてこの方程式を求め、その(超)平面上にプロットされる各データ点が決定面を境にどちら側に存在するかで分類しましょう、というのがPRML4.1節の目標です。

　2-3次元まではグラフ上にプロットして視覚的・直感的に分類できますが、4次元以上になると視覚化が困難になります。
それを数値的に処理するための便利な道具がこの識別関数ということです。

### 活用場面

- 線形識別
- 線形回帰
    - 線形回帰は今回扱っていませんが、特に重回帰している時に何を求めているかというと、この平面を求めています。
- ロジスティック回帰
    - 線形(まっすぐ、直線的、平面的であること)ではありませんが、やっていることは同じです。


# 識別関数の考察

## 超平面の理解

　($\mathrm{A}1$)・($\mathrm{B}1$)式が直線・平面を示す方程式であり($4.4$)式がそれらの拡張として超平面を示す方程式であることをご説明します。

### 直線の方程式

　2次元平面$xy$において方程式

```math
\begin{equation}
ax + by +c = 0 \tag{A1}
\end{equation}
```
ここで、$(a, b) \neq (0, 0)$であり、これを変形すると

```math
\begin{equation}
y(x) = - \frac{a}{b} x - \frac{c}{b} \tag{A2}
\end{equation}
```
これは傾きが$-a \ / \  b$で切片が$-c \  / \  b$となる直線を描く方程式です。
予め$a, b, c$の値を決めてしまえば、$x$の値に応じて$y$の値が決まります。
$a, b, c$の値は何でも良いのですが、今回は$(a, b, c) = (-2, 4, 6)$として描画したのが下記の図1です。

<figure>
<img width="500" alt="line.png" src="https://qiita-image-store.s3.amazonaws.com/0/321980/7b3474ee-0600-6cb0-89e9-cbef68c32f04.png">
<br>
<figcaption>
<b>図1 直線の方程式</b>
</figcaption>
</figure>

### 平面の方程式

　3次元空間$xyz$において、方程式

```math
\begin{equation}
ax + by + cz +d = 0 \tag{B1}
\end{equation}
```
ここで、$(a, b, c) \neq (0, 0, 0)$であり、これを直線の場合と同じく変形すると下記になります。

```math
\begin{equation}
z(x, y) = - \frac{a}{c} x - \frac{b}{c} y - \frac{d}{c} \tag{B2}
\end{equation}
```
この式も$a, b, c, d$の値を決めると、$(x, y)$の値に応じて$z$の値が決まります。
この式が本当に平面を表すのかどうか、$(x, y, z)$の組を1点として三次元プロットしたのが図2です。

<figure>
<img width="800" alt="plane.png" src="https://qiita-image-store.s3.amazonaws.com/0/321980/784430c1-18f3-d44e-6358-b91bdd0704bb.png">
<figcaption>
<br>
<b>図2 平面の方程式</b>
</figcaption>
</figure>
<br>

　図2の通り、($\mathrm{B}2$)式において$( x, y, z )$が満たす点の集合は平面となります。
3次元の表現に慣れていない方向けに、どうして($\mathrm{B}2$)式が平面を表すのか詳細なイメージをお伝えしますと、平面は下図3のように無数の直線をひと繋ぎにしたものです。

<figure>
<img  width="800" alt="lines.png" src="https://qiita-image-store.s3.amazonaws.com/0/321980/15f9e0d8-0b93-2feb-3cd0-a0198704071a.png">
<br>
<figcaption>
<b>図3 平面は無数の直線の集合から成る</b>
</figcaption>
</figure>
<br> 

　図3は($\mathrm{B}2$)式で$y$の値を固定し$z = a' x + b'(y)$の式をいくつかの$y$の値で求めた複数の直線を一つの空間に描画したものです。
($y$が決まると$b'(y)$が決まって定数扱いになり、直線の方程式を考えれば良いことになります。)
ここでは直線を20本描画しましたが、この数を増やしていき隙間なく無数の直線が集まると平面になります。

　4次元では平面がz軸方向に無数に積み重なって六面体になります。
5次元以上はさすがに描画もできないので、ここから先、話は2次元・3次元に絞ります。

　ここまでで、($4.4$)式の2次元・3次元の場合が直線・平面を示す方程式であることをご説明させていただきました。
識別関数とは識別(分類)対象のデータが乗る直線・平面のことです。


## 超平面の性質から識別関数を理解

　ここからは、直線・平面の方程式の一般的な性質をいくつか使って、PRMLで述べられている次の三点の理解を深めます。

1. パラメータベクトルの方向と決定面の方向の関係
2. バイアスパラメータと原点との関係
3. 識別関数の値$y(\mathbf{x})$と決定面との関係

### 1. パラメータベクトルの方向と決定面の方向との関係

　パラメータベクトル$\mathbf{w}$は決定面(決定境界, 2次元なら直線)と直交し、この$\mathbf{w}$の方向が決定面の方向だということがPRMLで述べられています。

　決定面が直線(データ$\mathbf{x}$が2次元)の場合を考えます。
改めて直線の方程式を下記に示します。

```math
\begin{equation}
ax + by + c = 0 \tag{A1}
\end{equation}
```

この直線上の任意の点を$\mathrm{P} (x, y)$とします。
また、この平面上のある一点$\mathrm{P_0} (x_0, y_0)$とします。
この点$P_0$上でも平面の方程式は満たされ

```math
\begin{equation}
ax_0 + by_0 + c = 0 \tag{A1'}
\end{equation}
```

が成り立ちます。
そのため、($\mathrm{A}1$)式と($\mathrm{A}1'$)式の差を取ると

```math
\begin{equation}
a( x - x_0 ) + b ( y - y_0 ) = 0 \tag{A3}
\end{equation}
```

となります。
この($\mathrm{A}3$)式の左辺は次の二つのベクトルの内積と読み替えることができます。

```math
\begin{equation}
\mathbf{w}^T = (
\begin{array}{cc}
a & b
\end{array}
)
\end{equation}
```

```math
\begin{equation}
\vec{\mathrm{P_0 P}} = \left(
\begin{array}{c}
x - x_0 \\
y - y_0
\end{array}
\right)
\end{equation}
```

つまり次の($\mathrm{A}4$)式の通りです。

```math
\begin{equation}
\mathbf{w}^T \cdot \vec{\mathrm{P_0 P}} = 0 \tag{A4}
\end{equation}
```

この($\mathrm{A}4$)式は点$P_0$を通る、直線($\mathrm{A}1$)上の任意のベクトル$\vec{\mathrm{P_0 P}}$とパラメータベクトル$\mathbf{w}$が直交していることを示します。
図1にパラメータベクトルを描き加えたのが図4です。
見た目でも直線とベクトルが直交しているのが分かると思います。

<figure>
<img src="https://qiita-image-store.s3.amazonaws.com/0/321980/def8f9a1-4a71-abd5-51fa-14cf9dbbc22d.png">
<br>
<figcaption>
<b>図4 直線と直交するベクトル</b>
</figcaption>
</figure>
<br>

　PRMLでは先に何だか分からないけれどもパラメータベクトル$\mathbf{w}$で表される識別関数($y(\mathbf{x})$)や決定面が存在するということが示され、

```math
\begin{equation}
y(\mathbf{x}_A) = y(\mathbf{x}_B) = 0 \tag{A5}
\end{equation}
```

だから

```math
\begin{equation}
\mathbf{w}^T \cdot (\mathbf{x}_A - \mathbf{x}_B) = 0 \tag{A6}
\end{equation}
```

が成り立ち、そのため$\mathbf{w}$は決定面上の全ての点に直交すると述べられています。
ここで($\mathrm{A}5$)式は($\mathrm{A}1$)式と($\mathrm{A}1'$)式に対応し決定面上のある点が満たす方程式を示し、そして($\mathrm{A}3$)($\mathrm{A}4$)式で示される直交関係が導かれ、($\mathrm{A}6$)式に対応します。

　まとめますと、パラメータベクトルを求めるということは決定面(識別関数$y(\mathbf{x})=0$を満たす方程式)の形を求めるということであり、またパラメータベクトルはその決定面である超平面に直交するという性質を持ちます。
そして、ここから先のことを考えるために$\mathbf{w}$が決定面に直交するという性質が重要になります。

#### 法線ベクトル

パラメータベクトル$\mathbf{w}$が決定面と直交するということを上でご説明しましたが、
これは平面の方程式の一般的な性質としてこのような平面の方程式を示すパラメータからなるベクトルのことを「法線ベクトル」とも言います。

### 2. バイアスパラメータと原点との関係

　バイアスパラメータは原点から決定面までの直線距離を示すというのがPRMLの説明でした。

　こちらも、パラメータベクトル($\mathbf{w} = (a \ \ b)$)と切片$c$から原点と超平面(直線)の直線距離$R$が求まることを示します。
結論からすると下記が直線と原点の距離$R$を示します。

```math
\begin{equation}
R = \frac{|c|}{\sqrt{a^2 + b^2}} \tag{A7}
\end{equation}
```

今回はこの式をPRMLに合わせてベクトルを用いて導出します。
明らかに方程式の係数が直接関わっています。

　一般的な導出の方法は下記をご参照ください。
　➡︎[元の直線と原点を通り元の直線に直交する直線との交点から距離を求めるという方法](https://math.nakaken88.com/textbook/basic-distance-between-origin-and-line/)

　今回対象とするのはデータ$\mathbf{x}$が2次元の時の決定面で、これを示す直線は($\mathrm{A}1$)式で示されます。

```math
\begin{equation}
ax + by + c = 0 \tag{A1}
\end{equation}
```

この直線に直交するベクトルは($\mathrm{A}4$)($\mathrm{A}6$)式および図4に示されるように、$\mathbf{w}^T = (a \ \ b)$です。

　原点からこのベクトル$\mathbf{w}$と平行に線を引くと、$\mathbf{w}$の何倍かの長さの線が決定面($\mathrm{A}1$)に直交します。
そのベクトルの長さが原点から平面の直線距離$R$です。
この長さ$R$を求めるのに、原点からの決定面上の任意の点$\mathrm{P}(x, y)$を示すベクトル$\vec{\mathrm{OP}} = \mathbf{x}$を利用し、次の式で表します。

```math
\begin{equation}
R = \frac{\mathbf{w}^T}{||\mathbf{w}||} \cdot \mathbf{x} \tag{A8}
\end{equation}
```

　この($\mathrm{A}8$)式は、下図の原点$\mathrm{O}$・直線(決定面)上の任意の点$\mathrm{P}$・直線(決定面)上の原点に最も近い点$\mathrm{Q}$の３点からなる直角三角形を描いた時の辺$\mathrm{OQ}$の長さを求める方法を示しております。
つまり、パラメータベクトル$\mathbf{w}$に平行な単位ベクトル($\mathbf{w}^T / ||\mathbf{w}||$)と$\vec{\mathrm{OP}}$との内積が原点と決定面との距離$R$(辺$\mathrm{OQ}$の長さ)を示すということです。

<figure>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321980/bc874a5f-dcf2-5fbc-fc35-0b1f38f1adad.png">
<figcaption>
<br>
<b>図5 原点と直線の距離</b>
</figcaption>
</figure>
<br>

　また、決定面上($y = 0$)では$\mathbf{w}^T \cdot \mathbf{x} = - w_0$であることから($4.5$)式が導かれます。

```math
\begin{equation}
R = \frac{\mathbf{w}^T}{||\mathbf{w}||} \cdot \mathbf{x} 
= - \frac{w_0}{||\mathbf{w}||} \tag{4.5}
\end{equation}
```

　一方でこの節の冒頭で述べました一般的な方法で直線の場合の原点との距離$R$を求める場合、下記のリンクで説明される通り、($\mathrm{A7'}$)式のように求めることができます。

```math
\begin{equation}
R = \frac{|c|}{\sqrt{a^2 + b^2}} = \frac{|c|}{||\mathbf{w}||} \tag{A7'}
\end{equation}
```

この式からバイアスパラメータ$w_0$は原点との距離の情報を持つと考えられます。
　➡︎[元の直線と原点を通り元の直線に直交する直線との交点から距離を求めるという方法](https://math.nakaken88.com/textbook/basic-distance-between-origin-and-line/)


　よくよく読むと、($\mathrm{4.5}$)式は正負の向きがあります。
これはパラメータベクトル$\mathbf{w}$の向きに対して決定面が存在する向きを示しております。
$\mathbf{w}$と決定面上の点を示すベクトル$\mathbf{x}$が成す角が鋭角(同じ側)なら距離は正になりますし、鈍角(反対側)なら負になるということです。



### 3. 識別関数の値y(x)と決定面との関係

　繰り返しの登場となりますが、ここまで識別関数

```math
\begin{equation}
y(\mathbf{x}) = \mathbf{w}^T \mathbf{x} + w_0 \tag{4.4}
\end{equation}
```
の性質を考察し$\mathbf{w}$および$w_0$の意味が分かりました。
ではそれら$\mathbf{w}$および$w_0$を用いて求められる$y(\mathbf{x})$が何を示すのかを考察します。

　PRMLでは決定面と任意の点$\mathbf{x}$との距離(直交距離)が($4.7$)で表されると述べられております。

```math
\begin{equation}
r = \frac{y(\mathbf{w})}{||\mathbf{w}||} \tag{4.7}
\end{equation}
```

この$r$は「直交距離」(=「任意の点$\mathbf{x}$と決定面との直線(最短)距離」)と説明されております。
それがどうしたということなのか、機械学習で識別問題に取り組む際の意味を考察します。

　($4.6$)式では任意のデータ点$\mathbf{x}$について、決定面上の直交射影(正射影)点$\mathbf{x}_\bot$を用いて表します。

```math
\begin{equation}
\mathbf{x} = \mathbf{x}_\bot + r \frac{\mathbf{w}}{||\mathbf{w}||} \tag{4.6}
\end{equation}
```

この状況を図示すると次の図6です。

<figure>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321980/446c3fad-dc68-5f93-2611-a25718870733.png">
<figcaption>
<br>
<b>図6 任意の点と決定面との距離</b>
</figcaption>
</figure>
<br>

　($4.6$)式と図6の関係は次の通りです。

```math
\mathbf{x} = \vec{\mathrm{OQ}} \\
\mathbf{x}_\bot = \vec{\mathrm{OP}} \\
r = ||\vec{\mathrm{PQ}}||
```

ちなみに$\mathbf{x}_\bot$は点$\mathbf{x}$の決定面上への直交射影(正射影)とあります。
下記の参照によればベクトル$\mathbf{x}$の決定面上への正射影とは青線とオレンジ破線との交点から点Pまでのベクトルが本来の意味だと思いますが、ここでは決定め上の点のうち点$\mathbf{x}$に最も近い点Pを示すベクトル$\vec{\mathrm{OP}}$を表しているようです。
　➡︎[直交射影(正射影)ベクトル](http://examist.jp/mathematics/math-b/planar-vector/seisyaei-vector/)

　($4.6$)式と図６と見比べると、点$\mathbf{x}$とは点Pから決定面に対して法線ベクトル方向(パラメータベクトル$\mathbf{w}$に平行な単位ベクトル($\mathbf{w} / ||\mathbf{w}||$)方向)に距離$r$の位置に存在する点と説明することができます。
これがすなわち「直交距離」の意味であり、距離$r$とは空間上の任意の点$\mathbf{x}$と決定面($y = 0$)との最短距離を示します。

　識別関数にデータ$\mathbf{x}$を入力して$y(\mathbf{x})$が求まると($4.7$)式に従って決定面からの距離が求まります。
この値には正負があり、その符号によって決定面に対してどちら側に属しているかを示します。
従いまして、$y(\mathbf{x})$の値は、データ$\mathbf{x}$は決定面に対してどちら側のクラスに属しており($y(\mathbf{x})$の符号)、またどれだけそのクラスの度合いが強いか($y(\mathbf{x})$の値の大きさ)を示すのだと思います。

#### 直交距離(Perpendicular distance)

　ちなみに、「直交距離(Perpendicular distance)」については英語版のWikipediaに記載がありました。

　【[Wikipedia "Perpendicular distance"](https://en.wikipedia.org/wiki/Perpendicular_distance)より要点を和訳】

1. 二次元においては点と直線の距離
2. 三次元において
    1. 平面上の原点に最も近い点と原点との距離
    2. 空間中の任意の点と平面との距離
    3. 空間中の任意の2直線間の距離
3. 回帰分析時のフィッティングの質を評価する際にフィットさせた直線と各データ点との距離

今回は文脈からして2.2が該当すると思います。


# まとめ

### 識別関数の正体

　($4.4$)式で表される識別関数

```math
\begin{equation}
y(\mathbf{x}) = \mathbf{w}^T \mathbf{x} + w_0 \tag{4.4}
\end{equation}
```

これは超平面を示す方程式であり、2次元では直線

```math
\begin{equation}
ax + by +c = 0 \tag{A1}
\end{equation}
```

```math
\begin{equation}
y(x) = - \frac{a}{b} x - \frac{c}{b} \tag{A2}
\end{equation}
```

3次元では平面

```math
\begin{equation}
ax + by + cz +d = 0 \tag{B1}
\end{equation}
```

```math
\begin{equation}
z(x, y) = - \frac{a}{c} x - \frac{b}{c} y - \frac{d}{c} \tag{B2}
\end{equation}
```

を示します。

### パラメータベクトルの意味

　パラメータベクトル$\mathbf{w}$は識別関数$y(\mathbf{x})=0$を満たす方程式(決定面)の形を決め、決定面と直交する(決定面中の任意のベクトル$\vec{\mathrm{P\_0 P}}$と直交する)ベクトルで、その向きが決定面の向きを示します。
（「形」としたのは次のバイアスパラメータに示す通り、バイアスパラメータの分だけ平行移動するため。）

```math
\begin{equation}
\mathbf{w}^T \cdot \vec{\mathrm{P_0 P}} = 0 \tag{A4}
\end{equation}
```


### バイアスパラメータの意味

　バイアスパラメータ$w_0$は決定面と原点との最短距離$R$を示します。

```math
\begin{equation}
R = - \frac{w_0}{||\mathbf{w}||}
\end{equation}
```


### 識別関数で求めた値の意味

　識別関数($4.4$)式から求まる値$y(\mathbf{x})$からは決定面からの距離$r$が求まり、データ$\mathbf{x}$が決定面を境にどちらのクラスにどれくらい属しているかを示します。

```math
\begin{equation}
r = \frac{y(\mathbf{w})}{||\mathbf{w}||} \tag{4.7}
\end{equation}
```


クラス分類においてあるデータの入力$\mathbf{x}$があった時に識別関数が分かっていれば(いちいち散布図に示さなくとも数値的に)どちらのクラスに属するデータなのかを求めることができるということです。

# 参考文献

1. C.M.Bishop著 元田　浩他訳 「パターン認識と機械学習　上」　初版第８刷　(丸善出版　2018年)
2. 山形邦夫・和田倶幸著　「線形代数学入門」　(培風館　2006年)
3. 小林　道正著　「図解入門　よくわかる　線形代数の基本と仕組み」　(秀和システム　2005年)