多摩川の辺りで働くデータサイエンティスト

ポートフォリオ的なもの(未完)

バイアスーバリアンス(+ノイズ分解)を導出する。(初歩なんだけど、誤解していたという次第。)

バイアス-バリアンス分解(+ノイズ)とは

バイアスーバリアンス分解は回帰の二乗誤差をバイアス(モデルの表現力不足)とバリアンス(過学習(偶然を必然と勘違いすること)による悪影響)に分解するものです。

これ自身は数学的な帰結ではあるものの、実際に誤差を分解する使い方はしないで、観念的に利用するのがメインの使い方になります。例えば、バイアス-バリアンスのトレードオフを示して、モデル選択や改善時にモデルの表現能力を調整したり、データ数を増やすか否かの判断を行うための(素人向けの)論拠とするために使うといった感じになります。まあ、機械学習統計学界隈では基本的で知ってて当然といった内容なので、通常の議論ではわざわざ話にするようなものでもないのです。

ってな感じで、この分解の証明を初心者向け勉強会でしようとしたところ、意外と手間取り、色々とwebを探しても納得いく証明がなく苦労しました。(なんというか、分かってるのか?、勉強がてらに写経しているのか?といったブログが検索の上位にくる感じで苦労しました。Googleの技術力向上に期待笑)

結局、下記の東大の教科書の証明を確認したところ、「バイアスーバリアンス分解」ではなく、「バイアスーバリアンスーノイズ分解」になっていて、意外や意外という感じだったので、記事にしようと思った訳です。(実は下記の教科書を丁度2年くらい前に読んだはずなのに、完全に忘れていました。笑)

東京大学工学教程 情報工学 機械学習

東京大学工学教程 情報工学 機械学習

https://www.amazon.co.jp/dp/4621089919

バイアス-バリアンス-ノイズ分解

説明変数 xと対応する目的変数 tについて考えます。(ここで説明変数が xであった時の目的変数を t_{x}と表記するとします。また、説明変数も目的変数も、現実世界からサンプルして取得するため、確率変数であるとします。)

ここで二乗誤差の評価を行う予測モデル yを考えます。学習に用いたデータ Dを用いて学習を行い、xについて予測するとすると予測結果はy(x,D)と表すとします。

ここで、二乗誤差 \begin{align} E_{D}E_{x}E_{t_{x}} \left[ \left( t_{x} - y(x , D) \right)^{2} \right] \end{align} について考えます。

\begin{align} E_{D}E_{x}E_{t_{x}} \left[ \left( t_{x} - y(x , D) \right)^{2} \right] = & E_{x}E_{D}E_{t_{x}} \left[ \left( (t_{x} - E_{t_{x}}[t_{x}]) - (y(x , D) - E_{t_{x}}[t_{x}]) \right)^{2} \right]\\ = & E_{x}E_{D}E_{t_{x}} \left[ (t_{x} - E_{t_{x}}[t_{x}])^{2} - (y(x , D) - E_{t_{x}}[t_{x}])^{2} \right]\\ & + E_{x}E_{D}E_{t_{x}} \left[2(t_{x} - E_{t_{x}}[t_{x}]) \cdot (y(x , D) - E_{t_{x}}[t_{x}]) \right]\\ \end{align} とできますが、第二項は \begin{align} E_{x}E_{D}E_{t_{x}} \left[2(t_{x} - E_{t_{x}}[t_{x}]) \cdot (y(x , D) - E_{t_{x}}[t_{x}]) \right] &= 2E_{t_{x}} \left[(t_{x} - E_{t_{x}}[t_{x}]) \right] \cdot E_{x}E_{D} \left[(y(x , D) - E_{t_{x}}[t_{x}]) \right]\\ &= 2(E_{t_{x}}[t_{x}] - E_{t_{x}}[t_{x}]) \cdot E_{x}E_{D} \left[(y(x , D) - E_{t_{x}}[t_{x}]) \right] \\ &= 2E_{x}E_{D}\left[(0) \right] \cdot E_{x}E_{D} \left[(y(x , D) - E_{t_{x}}[t_{x}]) \right]\\ &= 0 \end{align} となるため、 \begin{align} E_{D}E_{x}E_{t_{x}} \left[ \left( t_{x} - y(x , D) \right)^{2} \right] = & E_{x}E_{D}E_{t_{x}} \left[ (t_{x} - E_{t_{x}}[t_{x}])^{2} + (y(x , D) - E_{t_{x}}[t_{x}])^{2} \right]\\ & - E_{x}E_{D}E_{t_{x}} \left[2(t_{x} - E_{t_{x}}[t_{x}]) \cdot (y(x , D) - E_{t_{x}}[t_{x}]) \right]\\ =& E_{x}E_{D}E_{t_{x}} \left[ (t_{x} - E_{t_{x}}[t_{x}])^{2} + (y(x , D) - E_{t_{x}}[t_{x}])^{2} \right]\\ =& E_{x}E_{t_{x}} \left[ (t_{x} - E_{t_{x}}[t_{x}])^{2}\right] + E_{x}E_{D}\left[ (y(x , D) - E_{t_{x}}[ t_{x} ])^{2} \right]\\ =& E_{x}E_{t_{x}} \left[ (t_{x} - E_{t_{x}}[t_{x}])^{2}\right] + E_{x}E_{D}\left[ \left( \left(y(x , D) - E_{D}[y(x , D)] \right) - \left(E_{t_{x}}[ t_{x} ] - E_{D}[y(x , D)] \right) \right)^{2} \right]\\ =& E_{x}E_{t_{x}} \left[ (t_{x} - E_{t_{x}}[t_{x}])^{2}\right] + E_{x}E_{D}\left[ \left(y(x , D) - E_{D}[y(x , D)] \right)^{2} + \left(E_{t_{x}}[ t_{x} ] - E_{D}[y(x , D)] \right)^{2} \right]\\ & -E_{x}E_{D}\left[2\left(y(x , D) - E_{D}[y(x , D)] \right) \cdot \left(E_{t_{x}}[ t_{x} ] - E_{D}[y(x , D)] \right)\right] \end{align} とできます。上式の第三項は \begin{align} &E_{x}E_{D}\left[2\left(y(x , D) - E_{D}[y(x , D)] \right) \cdot \left(E_{t_{x}}[ t_{x} ] - E_{D}[y(x , D)] \right)\right]\\ & =2E_{x}E_{D}\left[\left(y(x , D) - E_{D}[y(x , D)] \right)\right] \cdot E_{x}\left[\left(E_{t_{x}}[ t_{x} ] - E_{D}[y(x , D)] \right)\right]\\ & =2E_{x}\left[\left(E_{D}\left[y(x , D)\right] - E_{D}[y(x , D)] \right)\right] \cdot E_{x}\left[\left(E_{t_{x}}[ t_{x} ] - E_{D}[y(x , D)] \right)\right]\\ & = 2 \cdot 0 \cdot E_{x}\left[\left(E_{t_{x}}[ t_{x} ] - E_{D}[y(x , D)] \right)\right]\\ & = 0 \end{align} となるので、結局 \begin{align} E_{D}E_{x}E_{t_{x}} \left[ \left( t_{x} - y(x , D) \right)^{2} \right] =& E_{x}E_{t_{x}} \left[ (t_{x} - E_{t_{x}}[t_{x}])^{2}\right] + E_{x}E_{D}\left[ \left(y(x , D) - E_{D}[y(x , D)] \right)^{2} + \left(E_{t_{x}}[ t_{x} ] - E_{D}[y(x , D)] \right)^{2} \right]\\ & -E_{x}E_{D}\left[2\left(y(x , D) - E_{D}[y(x , D)] \right) \cdot \left(E_{t_{x}}[ t_{x} ] - E_{D}[y(x , D)] \right)\right]\\ =& E_{x}E_{t_{x}} \left[ (t_{x} - E_{t_{x}}[t_{x}])^{2}\right] + E_{x}E_{D}\left[ \left(y(x , D) - E_{D}[y(x , D)] \right)^{2} \right]\\ & + E_{x}\left[ \left(E_{t_{x}}[ t_{x} ] - E_{D}[y(x , D)] \right)^{2} \right] \end{align} とできます。

第一項E_{x}E_{t_{x}} [ (t_{x} - E_{t_{x}}[t_{x})^{2}] ]は目的変数の平均からの乖離(分散)を表しているため、説明変数上のノイズとして解釈でき、第二項 E_{x}E_{D}[ \left(y(x , D) - E_{D} ( y(x , D) ) \right)^{2} ] は学習データDによるモデルのバラツキを表しているので、モデルのバリアンスと解釈できます。最後の第三項 E_{x}[ \left(E_{t_{x}}( t_{x} ) - E_{D}(y(x , D)) \right)^{2}]は、目的変数 tの平均(ノイズを除いたもの)と予測モデルの平均 y(x , D)過学習を除いたもの)の差の二乗なので、バイアスの二乗と解釈できます。

したがって、 \begin{align} 二乗誤差 = ノイズ + バリアンス + バイアス^{2} \end{align} と二乗誤差を分解できることが分かります。

まとめ

二乗誤差をバイアス-バリアンス(+ノイズ)への分解を導出しました。内容としては簡単な導出ですが、このくらいの基礎的な内容でも意外と誤って認識していることがあるんだなといった良い教訓が得れました。(以後気をつけよう笑)