Python、機械学習

パラメトリックモデルとノンパラメトリックモデル

機械学習を勉強していると出てくる、パラメトリックモデルとノンパラメトリックモデル。

モデルの構築方法はパラメトリックな手法とノンパラメトリックな手法に分類されます。それぞれ、どういう意味なのでしょうか?

パラメトリックモデル

パラメトリックな手法では、はじめにモデル(型)を決めます。

例えば、y=ax+bという型を選びます。その後、trainデータにできるだけ合うようにパラメータa、bを決めます。直線、という型を決めてしまって、あとは傾きaと切片bで直線の具体的な形を決めていくイメージです。

他の例でいうと、y=ax2+bはU字型です。U字型、という型を決めてしまって、あとはaとbでU字の形(幅広いUにするのか、など)を調整します。

少数のパラメータで規定されるシンプルな型にはめるという意味で、「パラメトリック」といいます。あらかじめ型を仮定してしまおうということです。

y=ax+bは単純な線形回帰モデルですが、他にも様々な機械学習モデルがあります。データの分布が線形っぽいなら線形のモデル、非線形なら非線形のモデルを使った方が、データにフィットしやすくなります。

ノンパラメトリックモデル

ノンパラメトリックな手法ではモデルを仮定しません。trainデータにできるだけフィットした、滑らかな線を引くイメージです。

型を仮定しないため、線の引き方に制約がありません。ノンパラメトリックな手法、つまり、データに沿って滑らかな線を引く方法には色々ありますが、例えば平滑化スプライン、加法モデル、といったものがあります。

なお、ノンパラメトリックの「ノン」とは、パラメータが無いという意味ではなく、「単純なモデルを予め仮定しよう」という指向を否定する「ノン」です

型は定めないものの、trainデータに沿う滑らかな線を引くために多数のパラメータを決めなければならない、まあでも気にせず引いてみようという感じでしょうか。

詳細はこちらの文献をご覧ください。
ノンパラメトリック回帰による推定 <特集>データ駆動型アプローチの新展開

そして、ノンパラメトリックな手法には大きく分けて2パターンあります。

1つは、単純な関数を足し合わせるような部類のもの、もう1つは局所的に異なる関数にして、それらをつなぎ合わせる部類のものです。

前者は、例えばy=a1g1(x)+a2g2(x) + ・・・+bのように、xの線形モデルではなくてxの関数の線形モデルで表すものです。このg()は基底と呼ばれます。

後者は、例えばxが2以下の範囲ではy=ax+bとし、xが2から4の間ではy=cx+dとし、xが4以上ではy=px+qとする、といったものです。

パラメトリックな手法で仮定するモデルとは異なり、複雑なのがわかります。こちらも、先ほどのリンクの文献で詳述されています。

パラメトリックモデルが形を変えるものであったのに対し、ノンパラメトリックモデルは複数の形を重ねて一体化させるようなイメージです。

ノンパラメトリックな手法だと制約がないため、より柔軟にモデルを構築できるメリットがあります。一方で、たくさんのtrainデータがないと、うまく線を引けないというデメリットもあります。

セミパラメトリックな手法、というものもあり、こちらは、パラメトリックモデルとノンパラメトリックモデルを線形結合したものを指すようです。