ちょっと理論面と言うかテクニカルと言うか、そんな話題になります。
機械学習で予測モデルなどを構築するとき、ちょいちょい顔をだすキーワードに、バイアス(Bias)とバリアンス(Variance)、そして正則化などがあります。
- バイアスが高い状態(ハイバイアス)のとき、その予測モデルは学習不足(under-fitting)と呼ばれます
- バリアンスが高い状態(ハイバリアンス)のとき、その予測モデルは過学習(over-fitting)と呼ばれます
予測モデルを構築するとき、この2つの概念(バイアスとバリアンス)を意識しておいた方がいいでしょう。
今回は、「バイアスとバリアンスのジレンマと正則化」というお話しをします。
Contents
予測モデルの3つの誤差
真の状態と予測した状態の誤差は、以下のように3つに分けられると言われています。ちなみに、誤差は定式化できますが、ここでは一切数式を登場させません。
誤差=バイアス(Bias)の2乗+バリアンス(Variance)+ノイズ
- バイアス:学習データに対し学習が上手くいっていないと大きくなる。つまり、学習不足(under-fitting)
- バリアンス:学習データに対し過学習していると大きくなる。つまり、過学習(over-fitting)
ノイズは削除不可能な誤差(irreducible error)で、残り2つ(バイアスとバリアンス)がどうにかなる誤差です。
バイアスとバリアンスは、ある程度モデルを改善していると、トレードオフの関係になります。要は、バイアスを小さくしようとするとバリアンスが大きくなり、逆も然りです。
バイアスを小さくするところから始める
最初は、バイアスを小さくするところから始めます。
要するに、先ずは学習データを上手く予測できるモデルを構築することに専念しましょう、ということです。
学習データすら上手く予測でてきいない段階で、バリアンスを気にするのは気が早すぎます。
バイアスを改善する方法
バイアスを改善する方法は、主に以下の2つです。
- 有効な特徴量を増やす
- アルゴリズムを変える
特徴量で工夫をしつつ、それでも改善の目途が立たない場合には、より複雑なアルゴリズムへ変更を検討します。
より複雑なアルゴリズムへ変更とは、線形回帰でダメなら回帰木で、回帰木でだめならランダムフォレストで、みたいな感じです。
ただ、より複雑なアルゴリズムに変更することでバイアスは改善されますが、過学習が起こりバリアンスが大きくなります。
バリアンス再考
バイアスに比べ、バリアンスの概念が分かりにくいと思いますので、説明を加えます。
バイアスは、シンプルに考えると、学習データと予測値の間の誤差です。
バリアンス(Variance)を日本語に訳すると「分散」になります。この場合、学習データによって変動する度合いです。言い換えると、学習データに依存し過ぎることで新しいデータへの予測が悪化する度合いです。
後で言及しますが、ハイバリアンスな予測モデルのクロスバリデーション(CV)精度指標の値は著しく悪いです。最後に、クロスバリデーション(CV)について簡単に説明します。
バリアンスを改善する方法
バリアンスを改善する方法は、主に以下の2つです。
- データ量を増やす
- 不必要な特徴量を減らす
過学習した状態でよくあるのが、学習すべきでない「学習データのノイズ」のようなものまで学習してしまうことです。
要は、新しいデータにも起こりうるようなパターンなのか、そのある1つの学習データだけの特別な何かなのか、そこの見極めが出来ず、個別具体的な事象まで他でも起こるものとして学習してしまうのです。
1つの解決策として、データ量を増やすというのがあります。
ある1つの学習データだけの特別な何かが、10分の1の事象(10サンプルの中で1サンプルだけの事象)なのか、1,000,000分の1の事象(1,000,000サンプルの中で1サンプルだけの事象)なのかで意味が変わってきます。
要は、学習データのデータ量が増えることで、特殊な事象なのかどうかが見えてきます。
不必要な特徴量を減らすも同様です。過学習を起こすような特徴量は不必要です。
バイアスとバリアンスのバランスをとる
次に問題になるのが、バイアスとバリアンスのバランスの問題です。
先ほども言いましたが、バイアスを小さくしようとするとバリアンスが大きくなり、逆も然りです。
よく正則化、正則化、正則化…… というワードを統計学や機械学習界隈で聞くと思います。
正則化によって、バイアスとバリアンスのバランスをとることが出来るからです。正則化によって過学習制御を行えるということです。
正則化項の重み(λ)でコントロールすることが出来ます。
正則化項の重み(λ)を小さくすると……
- バイアスは小さくなる
- バリアンスは大きくなる
一方、
正則化項の重み(λ)を大きくすると……
- バイアスは大きくなる
- バリアンスは小さくなる
と言うことは、目指す正則化項の重み(λ)とは、全体の誤差が小さくなる値です。
誤差=バイアス(Bias)の2乗+バリアンス(Variance)+ノイズ
先ほども言いましたが、バイアスが高い場合、より複雑なアルゴリズムというかモデルに変更することでバイアスは改善されますが、過学習が起こりバリアンスが大きくなります。
そこで過学習を抑制するために正則化を導入し、バリアンスが過剰に大きくならない程度にバイアス改善を目指します。
ハイバイアスなの? ハイバリアンスなの?
自分が構築した予測モデル……
- ハイバイアスなの?
- ハイバリアンスなの?
気になるところです。
最後にその見極め方について簡単に説明します。
色々な見極め方がありますが、比較的簡単なのは、以下の2つの指標を使うやり方です。
- 学習データすべてを使った場合の誤差の大きさを表す指標
- クロスバリデーションによる誤差の大きさを表す指標
学習データすべてを使った場合の誤差の大きさを表す指標とは、学習データすべてを使い予測モデルを構築し、正解データと予測結果の誤差を計算し指標化したものです。
クロスバリデーション(交差検証)による誤差の大きさを表す指標とは、学習データをさらに学習用と検証用に分割したデータセットの組み合わせを複数作り、それぞれのデータセットの組み合わせ(学習用と検証用)の中で検証用のデータを使い正解データと予測結果の誤差を計算し、それを最後にまとめ指標化したものです。
以下の2つの記号を使い説明します。
- Train Score:学習データすべてを使った場合の誤差の大きさを表す指標
- CV Score:クロスバリデーションによる誤差の大きさを表す指標
ハイバイアスの場合、例えば次のようになっているケースが多いです。
- データ量を増やしていくと、Train Scoreの値がそれほど高くない水準で推移する
Train Scoreの値が高くないので、学習で使ったデータそのものすら上手く予測できていない状況になっています。
ハイバリアンスの場合、例えば次のようになっているケースが多いです。
- データ量を増やしていくと、Train Scoreの値が非常に高い水準で推移する
- さらに、Train ScoreとCV Scoreの差が徐々に小さくなるも、その差は大きいまま推移する
Train Scoreの値が高いので、学習で使ったデータそのものは上手く予測できている状況になっています。
しかし、Train ScoreとCV Scoreの差が大きいため、学習で使ったデータ以外のデータに対し、上手く予測できていないことがわかります。
【補足】クロスバリデーション
精度検証を複数回実施するアプローチの1つが、クロスバリデーション(CV)法です。
例えば、データセットを10分割し、学習データとテストデータのセットを10組作ります。そうすることで、10回精度検証することができます。多くの場合、精度検証指標の平均値などを計算したりします。
通常のクロスバリデーション法は、例えばデータセットを10分割するとき、データをランダムに割り振り10個のデータセットを作ります。
今回のまとめ
今回は、「バイアスとバリアンスのジレンマと正則化」というお話しをしました。
機械学習で予測モデルなどを構築するとき、ちょいちょい顔をだすキーワードに、バイアス(Bias)とバリアンス(Variance)、そして正則化などがあります。
- バイアスが高い状態(ハイバイアス)のとき、その予測モデルは学習不足(under-fitting)と呼ばれます
- バリアンスが高い状態(ハイバリアンス)のとき、その予測モデルは過学習(over-fitting)と呼ばれます
バイアスとバリアンスはトレードオフの関係にあり、そのバランスをとるための1つの方法が、正則化です。正則化によって、バイアスとバリアンスのバランスをとることが出来るからです。正則化によって過学習制御を行えるということです。正則化項の重み(λ)でコントロールすることが出来ます。
厳密な数理的理解まで必要はありませんが、この2つの概念(バイアスとバリアンス)を意識しつつ、予測モデルを構築するようにしましょう。
ちなみに、正則化ではRidgeやLassoなどが有名です。