学習曲線は、訓練データのサンプル数と予測性能の関係を示したグラフである。学習曲線は、予測モデルが過学習を起こしているのか、それとも学習不足になっているのかを判断するて助けになる(Sebastian et al, 2017)。学習曲線の横軸は訓練データのサンプル数であり、縦軸は評価指標である。評価指標は、訓練データを用いて評価した指標と、検証データを用いて評価した指標の両方を用いる。
描き方としては、訓練データをダウンサンプリングしていきながら、学習と検証を行い、それぞれの評価指標を計算し、そして学習に使用したサンプル数を横軸に、そのときの評価指標を縦軸にプロットする。理想的なモデルであれば、サンプル数を大きくしたとき、学習データに対する予測精度と評価データに対する予測精度がほぼ同じ値に漸近する。その漸近される値があらかじめ設定した精度よりも高ければ、そのモデルがうまく作られていることを表す。
訓練データが少ない時、予測モデルは訓練データを丸暗記できるしまうことがある。訓練データを丸暗記してしまうために、訓練データに対して高い予測性能を示す。しかし、丸暗記をしたために、訓練データに潜む「特徴」を学習していないために、未知のデータに対して予測性能が低い。
一方で、訓練データが増えると、まる暗記よりも、すべてのデータに共通している特徴を学習するようになる。そのため、訓練データ一つ一つにうまく対応できないが、平均すると性能が高くなるモデルが作られる。つまり、訓練データに対する予測性能は、訓練データが少ない時に比べて、やや低くなる。しかし、このモデルはデータに含まれる特徴を学習しているため、未知のデータに対して高い性能を示す。
予測モデルを作成するとき、データの質と量によって、過学習(高バリアンス)あるいは学習不足(高バイアス)の状態になる。過学習あるいは学習不足を起こした時の学習曲線は数のようになる。
学習サンプル数を増やしているのにもかかわらず、訓練データと評価データに対する評価が、期待している性能よりも著しく低い場合は学習不足になっているといえる。これは、モデルに組み込まれたパラメーター数(特徴量の数)が少なく、学習の取りこぼしが多いからである。学習不足への対策として、データの特徴量の数を増やすことなどが挙げられる。
また、訓練データに対して高い予測精度を出していながらも、未知のデータである評価データに対しての予測精度が低いままの場合は、過学習を起こしているといえる。過学習を起こすのは、サンプル数が少ないにも関わらず、モデルが複雑(特徴量が多い・パラメーター数が多い)すぎる場合が多い。そのため、過学習への対策として、サンプル数を増やすか、モデルのパラメーター数を減らすか(特徴量を減らすか)である。
sklearn を利用して学習曲線を描く方法
乳がんのデータセットに対して、ランダムフォレストでモデルを作成するとき、その learning curve は次のように描かれる。オレンジ色の線は training data に対するモデルの予測精度で、青色の線は validation data に対するモデルの予測精度である。薄く塗りつぶされた範囲は、クロスバリデーションにより求められた精度の最大値と最小値の範囲を表している。
Python モジュールの scikit-learn では learning_curve
メソッドを使用することで、学習曲線の座標を計算できる。ランダムシードを設定していないので、実行するたびに、異なる learning curve が描かれる。
References
- Python Machine Learning, Second Edition, Chapter 1. Packt Publishing. 2017.