機械学習・自然言語処理の勉強メモ

学んだことのメモやまとめ

識別モデルと生成モデル

機械学習の分類問題は、識別モデルと生成モデルに大別される。
(識別関数によるアプローチもあるがここでは言及しない。)
自分の頭の整理のために、これらの違いをまとめる。

識別モデル(Discriminative model)



サンプルデータxがクラスyに分類する条件付き確率P(y|x)を直接モデル化する。
分類時は、\widetilde {y}=\arg \max _{ y }{P(y|x)  } を選択する。
分類問題で求めたいのは、個々のデータxがどのクラスに所属するかであり、識別モデルは所属確率を直接求めるモデルである。この考え方は最もシンプルで理にかなっており、機械学習で分類問題を解く場合、識別モデルによるアプローチが一般的な手法となっている。

生成モデル(Generative models)



観測データを生成する確率分布を想定し、観測データからその確率分布を推定する方法。
識別モデルと同様に条件付き確率P(y|x)をモデル化するがその方法が異なる。
(生成モデルでは直接これをモデル化しない。)
ベイズの定理を用いて以下のように書き直す。
\begin{eqnarray}P(y|x)=\frac{P(x|y)P(y)}{P(x)}\end{eqnarray}
この右辺が最大となるクラスyに分類する。
この時、分母のP(x)はクラスに依存しないので、分類時には不要である。すなわち、
\widetilde {y}=\arg \max _{ y }{P(x|y)P(y)}
のクラスに分類する。
ではP(x|y),P(y)が何を表しているか。
まず、P(y)はクラスの割合。(全体のうち、クラス1のデータが60%ならP(y)=0.6といった感じ。)
次に、P(x|y)であるが、これが少しややこしい。ここでは、観測されたデータxは、無作為に生成されるのではなく、何らかの分布に基づいて生成されると考える。この分布が、yのクラスごとに異なっており、各クラスが観測データxを生成する確率(尤度)がどのくらいあるか、という値である。

例えば、下記のようなデータが観測されたとする。(色でクラスを識別)
f:id:kento1109:20180110105754p:plain:w300
生成モデルでは各クラスは何らかの分布から生成された(潜在的に分布が存在する)と仮定する。
f:id:kento1109:20180110110100p:plain:w350

P(y|x)を直接求めるのではなく、P(x|y)P(y)を求めると何が嬉しいのだろうか。
P(x|y), P(y)が分かると、クラスを分類できるだけでなく、あるクラスに属する擬似的なデータを作ることができるようになる。そのような理由もあって、教師なし学習で使われることがある。(最近の例だと、生成モデルを使って画像生成などを行う研究が盛んだったりする。)