バリアンスとバイアス Python機械学習プログラミング第三章

 

この本では、数学的なことがあまり書かれていないので、読みやすく楽しいがバリアンスとバイアスについて大雑把だったので調べてみると面白くまた、理解が深まったので、追加でまとめた。

 

バリアンスとバイアス

過学習と未学習

未学習とは、訓練データに対しても、フィットが足りず精度が上がらないモデルの状態。

過学習とは、訓練データにモデルがフィットしすぎて、テストデータでの精度が上がらなくなってしまう状態。

バリアンスとは

バリアンスとは、過学習を表す度合いである。

数学的証明は以下

バイアスとは

バイアスとは未学習を表す度合いである。

この本に載っていない数学的処理

 y \: モデル

 \hat{y}\:真の値 

以下の尤度の期待値を最小にするために

  E[L(\vec{w})] = \int\int \{ y - \hat{y} \}^2p(\hat{y}, \vec{x}) d\hat{y} d\vec{x}

ここで条件付き確率の変換して

 p(\hat{y}, \vec{x}) = p(\hat{y} | \vec{x})p(\vec{x})

 \int\int\{ y - \hat{y} \}^2 p(\hat{y}|\vec{x})  d\hat{y}p(\vec{x})dx

p(x)は最小化されないので、中身を最小化するために、微分してその0になるところを求める。

 \frac{\partial\int\{ y- \hat{y}\}^2 p(\hat{y}|\vec{x}) d\hat{y}} {\partial \hat{y} } = \int 2\{y- \hat{y} \}p(\hat{y}|\vec{x}) d\hat{y} = 0\therefore y= E[\hat{y}|\vec{x}]

つまり、モデルの一番最適化されたものは、xの条件付き確率の期待値になるということがわかる。

感覚的にはすごく当たり前だが、数学の凄さだ!

次に尤度について考えることで、最も最小にすることを考える。尤度の同値変形を行うことで、出てくる項によって、その尤度の意味について考える。

ノイズ

まず、特殊な変形を施す。

 E[L(\vec{w})] = E[ \{y- \hat{y} \}^2 ]

 =  E[ \{ y - E[\hat{y}|\vec{x}]  + E[\hat{y}|\vec{x}] - \hat{y}\}^2  p(\hat{y},\vec{x})

 =  E[ \{ y - E[ \hat{y} | \vec{x} ] \}² -2(y - E[\hat{y}|\vec{x} ] )(E[\hat{y}|\vec{x}] - \hat{y})

 + \{ E[\hat{y}|\vec{x} ] - \hat{y} ]\}²) ]

ここで第2項は、期待値を取るとゼロになる。この証明は、積分するだけなのだが、下に数学的な補足に書いた。*1

そうすると

 E[ \{ y- E[ \hat{y}| \vec{x} ] \}² +  \{ E[\hat{y} | \vec{x}] - \hat{y} ]\}²) ]

となる。

ここで、第2項を考えると、正しいモデルで、ある変数xを入れた時に、出てしまう誤差である。パラメータをつけた時の誤差が出てしまう。この項は、入力の訓練データによってしまうので学習ではどうにもならない項であるのでノイズと呼ばれる。なので、学習は第1項を用いて行う。次に第1項を分解することで、学習の方法を考える項を出す。

バリアンス・バイアス分解

とうとうバリアンスとバイアスの登場!

 E[ \{ y- E[ \hat{y}| \vec{x} ] \}² ] = E[ \{ y - E[y|\vec{x}]  + E[y|\vec{x}]- E[ \hat{y}| \vec{x} ] \}² ]

 =  E[ \{ y - E[ y| \vec{x} ] \}² -2(y - E[y|\vec{x} ] )(E[y|\vec{x}] - \hat{y})

 + \{ E[y|\vec{x} ] - \hat{y} ]\}²) ]

 

上と同様の変形を行う。

  = E[ \{ y- E[ y| \vec{x} ] \}² +  \{ E[y | \vec{x}] - \hat{y} ]\}²) ]

この時第1項をバリアンス

第2項をバイアスという。

 

バリアンスの数学的な意味

バリアンス : E[ \{ y- E[ y| \vec{x} ] \}²]

この項を見てみると、一つの訓練データの結果と、結果の平均の差である。つまり、この値が小さいときは、ばらつきが少ないつまり過学習の状態の度合いということができる。ちなみに、この項は、値引く平均値(期待値)なので分散である。バリアンス(Variance)は日本語で分散である。

バイアスの数学的な意味

 バイアス: \{ E[y | \vec{x}] - \hat{y} ]\}²) ]

この値は、予想の値と実際の値の差であるので、どのくらいうまく学習できたかの値であるので、未学習の度合いであるといえる。

 

Python機械学習プログラミングの他の記事はこちら!

yosuke-programing.hatenadiary.com

 Amazonはこちら↓

[第2版]Python 機械学習プログラミング 達人データサイエンティストによる理論と実践 (impress top gear)

[第2版]Python 機械学習プログラミング 達人データサイエンティストによる理論と実践 (impress top gear)

 

 

*1:

 E[(y - E[\hat{y}|\vec{x} ] )(E[\hat{y}|\vec{x}] - \hat{y}) ] 
 = \int\int \{ yE[\hat{y}|\vec{x} ] - y\hat{y} - E[\hat{y}|\vec{x} ]E[\hat{y}|\vec{x}] + E[\hat{y}|\vec{x} ]\hat{y} \}p(\hat{y}, \vec{x})d\hat{y}d\vec{x} 

 = \int\int \{ yE[\hat{y}|\vec{x} ] - y\hat{y} - E[\hat{y}|\vec{x} ]E[\hat{y}|\vec{x}] + E[\hat{y}|\vec{x} ]\hat{y} \}p(\hat{y}|\vec{x})d\hat{y}p(\vec{x})d\vec{x} 

0になるのは\hat{y}の中の積分のみを考える。

 \int \{ yE[\hat{y}|\vec{x} ] - y\hat{y} - E[\hat{y}|\vec{x} ]E[\hat{y}|\vec{x}] + E[\hat{y}|\vec{x} ]\hat{y} \}p(\hat{y}|\vec{x})d\hat{y}

 yは、 \hat{y}積分では外に出る。のと \int p(\hat{y}|\vec{x})d\hat{y} = 1

なので第一項は、

 yE[\hat{y}|\vec{x} ]

第二項は、 \int\hat{y}p(\hat{y}|\vec{x}) = E[\hat{y}|\vec{x} ] より

 -yE[\hat{y}|\vec{x} ]

第三項は、期待値がそのまま出て、

 - E[\hat{y}|\vec{x} ]E[\hat{y}|\vec{x}]

第四項は、第二項と同様にして、

 E[\hat{y}|\vec{x} ]E[\hat{y}|\vec{x}]

よって、第一、二項、第三、四項それぞれが打ち消し合って0になる。