前回の記事『【機械学習入門⑤】非線形回帰・多項式回帰モデルをPythonの実装付きで理解!』では、非線形回帰・多項式モデルを学習しました。
多項式モデルでは、どんどん次元をあげる。すなわち、モデルを複雑にすればするほど、テストデータの精度が悪くなっていました。
機械学習入門⑤の多項式モデル精度
Train Score | Test Score | |
二次元モデル | 0.56 | 0.51 |
五次元モデル | 0.61 | 0.50 |
十次元モデル | 0.61 | 0.45 |
≫参考 : 【機械学習入門⑤】非線形回帰・多項式回帰モデルをPythonの実装付きで理解!
上記のとおりで、モデルの次元を上げると、テストデータ(=未知のデータ)に対応できなくなっています。
ちなみに、これを過学習(Over Fitting)と呼んでいました。
今回は、この「過学習」について、深く学んでいきたいと思います。
この記事で学べる内容は、以下のとおりです。
- 過学習について
- 過学習の回避・対策方法
機械学習を学ぶ上で、『過学習』は避けては通れない概念です。
さらに、これまで何となく準備していたテストデータについても、「なぜテストデータに分ける必要があるのか」が分かるようになります。
この記事を理解することで、適切な機械学習モデルを作れるような知識を身につけていきましょう。
この記事は、機械学習を体系的に学べる「機械学習入門講座」の1つです。
機械学習を勉強しようと思ったとき、以下のような悩みを持ったことはないですか?
- 機械学習を学んでみたいけど、何から勉強したら良いのか分からない
- 機械学習の本を買ってみたけど、よく分からなくて挫折した
- そもそも本を買うのではなく、まずは「無料」で学習してみたい
上記のような、「機械学習を勉強し始める前の悩み」を解決するために、この機械学習講座を作成しました。
「プログラミングスクールは高いし、参考書は途中で飽きちゃうし…」といった方は、ぜひ第1回から学習して頂けたらと思います(*’ω’*)
※ブログ記事なので、無料です。でも、作成に手は抜いていません。
Contents
過学習とは?

過学習とは、文字のとおり「過剰に学習してしまう現象」のことです。
もう少し詳しく書くと、訓練データに対して過剰に適合してしまい、未知のデータ(=テストデータ)をうまく予測できない状態が過学習です。
過学習のイメージ
過学習は、高校時代の期末テストに似ています。
- テスト前 : 一生懸命、教科書や参考書の内容を暗記する
- 期末テスト : 出題方法が違ったり、応用問題が多くて、よく分からない
こういった感じで、「学習したし教科書のような問題なら解けるんだけど、期末テストは分からない」といった状況が『過学習』です。
教科書の問題だけ解けても、期末テストの内容が分からないと意味がないように、実際に機械学習モデルを使うときも、テストデータに対する精度がよくないと活用するのは難しくなってきます。
過学習を回避・対策する3つの方法

過学習を避けて、未知のデータにも適応できる機械学習モデルを作るのは、3つの方法があります。
- 方法① : 汎化性能を高くする
- 方法② : モデルを簡易化する
- 方法③ : 正則化する
順番に確認していきましょう。
回避・対策方法① : 汎化能力を高くする
今までなんとなく『訓練データ』と『テストデータ』に分けていましたが、実はそれが汎化性能を高くする方法です。
持っているデータのすべてを訓練用に使うのではなく、全体の20%だけテストデータに活用していました。
- 訓練データ : 80%
- テストデータ : 20%
この手法を『holdout(ホールドアウト)』と言い、機械学習モデルを作成するなら、必ずと言っていいほど使われる手法です。
他の分割方法
- 交差検証(Cross Validation)
- 一つ抜き法(Leave-One-Out)
- ブートストラップ法(Boot Strap)
上記ですね。
中でも『交差検証』は、ホールドアウトと同じくらいの頻度で利用されます。
交差検証については、またのちの機械学習講座で触れていきます。
回避・対策方法② : モデルを簡易化する
モデル自体を簡易化するのも有効です。
たとえば、『【機械学習入門⑤】非線形回帰・多項式回帰モデルをPythonの実装付きで理解!』で触れた、多項式モデルの結果をもう一度確認してみましょう。
Train Score | Test Score | |
二次元モデル | 0.56 | 0.51 |
五次元モデル | 0.61 | 0.50 |
十次元モデル | 0.61 | 0.45 |
モデルを複雑にすればするほど、テストデータの精度が悪くなっています。
さらに、テストデータの精度が悪くなるにつれて、学習データの精度は高くなっています。
このように、モデルを複雑にすればするほど、既存のデータには対応できるけど、未知のデータには対応できなくなります。
多項式モデルを例にあげるのであれば、十次元から二次元に、モデルの複雑度を下げてあげれば過学習の対策になります。
※すべての多項式モデルで二次元がベストなわけではありません。もしかしたら三次元が良いかもしれないし、五次元が良いかもしれないです。
回避・対策方法③ : 正則化する
最後の過学習対策は、『正則化』です。
そもそも過学習は、訓練データだけに過剰に適合してしまう現象でした。
そこで、未知のデータにも適合できるようにするのが、正則化の役割です。
具体的な正則化手法は、『L1正則化』と『L2正則化』があります。
- L1正則化 : 不要な特徴量を減らして、過学習を回避する方法
- L2正則化 : 特徴量を減らさずに、過学習を回避する方法
2つの違いは、『特徴量を減らすか否か』です。
L1正則化では、特徴量を減らすことで、過学習を回避する手法になっています。
それに対してL2正則化は、あくまでも特徴量は取っておき、その上で過学習を避ける方法です。
正則化は、わりと内容が多くなってしまうので、詳しい解説は『【機械学習入門⑦】過学習を防ぐ正則化!L1(Lasso回帰)とL2(Ridge回帰)を詳しく解説』で紹介していきます。
【機械学習入門⑥】過学習まとめ
というわけで、今回は以上です。
「過学習とは何か」や「どうやって対策すれば良いのか」が分かったのではないでしょうか。
次回は、過学習の対策方法の1つである『正則化』について学習していきます。

正則化は過学習を防ぐ上で、メジャーな考え方になります。
この記事が良いと思ったら、ぜひ次の『【機械学習入門⑦】過学習を防ぐ正則化!L1(Lasso回帰)とL2(Ridge回帰)を詳しく解説』も学んで頂けたらと思います(*’ω’*)
『機械学習入門シリーズ』は長いので、休みながら学習を進めてみてくださいね。
休憩するときは、記事をツイートしておくと便利ですよ!
※メンションに気が付いたら、拡散する可能性高いです(`・ω・´)!
おすすめの記事
