読者です 読者をやめる 読者になる 読者になる

過学習への対処 (てきとーなイメージ)

プログラミング

機械学習をするとき少ないデータ数ではよくわからない部分、というのは往々にして存在する。このとき、「わからん、困った」とか言うのがゼロ頻度問題だし、そんなこと気にせず突っ走ってアグレッシブな推定をする困ったさんが過学習である。ような気がする。

こういうとき、対処法は大まかに分けて2つくらいになるっぽい。

  1. より穏当なモデルを使う。より具体的に言うと、低次元のモデル、あるいはスパースなモデルを使う。
    • 正則化とか情報量基準に基づくモデル選択とかなんかはこんな感じだよね
    • 1個に定まるし、パラメータも少なくなるので割とシンプルで軽いイメージ
  2. サンプリングして組み合わせる。学習データを変えたり、学習器を変えたりで異なるものを幾つか平均とか何とかして組み合わせる。すると、わかりにくいところはばらつきが大きくなってボケた感じになってくれて嬉しい。
    • bagging とか、boosting とか、random forest とか?
    • 学習も遅くて消費メモリも多くなるイメージ
    • Deep-learning はこれを狙ってる感

認知系でも exemplar model とか prototype model とかあって、それぞれに対応するっぽい感じがするし、割と自然なのかもしれない。

そういえば、1 は全体を同じ次数で表現するのは問題があるときが多くて、マッチ長を使う自然言語処理とかではよく見るけど、わからないところだけ低次のモデルを使う smoothing というのをよくやっているのを見る気がする。よく使われているところだと PPM とかそうな気がする。

ところで 2 でこれに相当するものってなんだろう? よくわからん。