機械学習の話です。
分類問題における生成モデルと識別モデルの違いについて、説明のしかたが色々あるようですので、まとめてみます。
まとめ
分類問題の解き方は、2つではなく、3つに分類されます。シンプルな順に、
- 識別関数
- 識別モデル
- 生成モデル
識別関数は、確率は関係なく、入力空間に識別面を直接引く方法です。2クラスなら、いい感じに分割できそうな面を線形・非線形を問わず引き、面で区切られたの一方の領域にあるサンプルをクラスA、もう一方をクラスBとする、という方法です。
識別モデルは、事後確率P(Ci|x)を直接モデル化する方法です。入力サンプルxに対応する事後確率をモデルを使って計算してから、最も事後確率が高いクラスを識別したクラスとします(Ciはi番目のクラスです)。
生成モデルは、事前確率P(Ci)と確率密度関数P(x|Ci)をモデル化し、それをベイズの定理を使って事後確率P(Ci|x)を計算し、最も事後確率が高いクラスを識別したクラスとする方法です。確率密度関数をつかって、クラスCiに属するサンプルをいくらでも生成できることから、生成モデルと呼ばれます。
これでは簡略化しすぎていて分からないという場合は、全文をどうぞ。
生成モデル・識別モデル
ここでは、識別関数を明示的に含まない場合の説明をします。
NAISTの講義「ビッグデータのための機械学習」のスライド
http://ahclab.naist.jp/lecture/2015/bda/3rd_oct23/bda2015_3rd.pdf
の10ページ目の定義では、
予測モデルを確率モデルで表すと P(t|x) 与えられたxからクラスtを識別するので識別モデル[1]によると、ベイズの定理では、P(t)は事前確率、P(t|x)は事後確率、P(x|t)は確率密度関数と呼ばれます。確率密度関数P(x|t)は、クラスtに属するxの生起確率を表します。予測モデルをベイズの定理で変形して P(t|x)=P(x|t)P(t)P(x)∝P(x|t)P(t) P(x|t), P(t)に対して分布を仮定
仮定した分布からP(t)が決定されP(x|t)が生成されるので生成モデル
これらの言葉を使うと、識別モデルは事後確率を直接モデル化しているといえます。一方、生成モデルは事前確率と確率密度関数P(x|t)を使って事後確率を間接的にモデル化しているといえます。
識別モデル、生成モデルの説明は、最初に記載したものと同じです。
同様の説明が、
http://techtipshoge.blogspot.jp/2017/01/blog-post.html
にも見られます。
一方、識別関数を識別モデルに含めている説明もみられます。
http://www.r.dl.itc.u-tokyo.ac.jp/node/33
によると
教師あり学習で観測データを分類するにあたって、まず観測データの属性を適当に組み合わせた判別関数を生成する。未知のデータは、この判別関数で分類する。これを識別モデルという。観測データを生成する確率分布を想定するかしないかのみで、生成モデルと識別モデルを定義しています。
一方、観測データを生成する確率分布を想定し、観測データからその確率分布を推定する方法を生成モデルと呼ぶ。
同様に、
https://www.nii.ac.jp/userdata/karuizawa/h23/111104_3rdlecueda.pdf
のp. 9 (図は省略)によると、
識別モデル元の資料を見たほうが分かりやすいですが、省略した図を言葉で説明すると、2クラス分類問題の場合、
生成モデル
- データのクラス境界を直接学習
- データの生成過程は考慮せず、所与のデータで問題を直接解く
- クラスごとの生成モデルを確率分布として学習
- クラス事後確率により識別(クラス境界は結果として得られる)
-
識別モデル
クラス1はf(x;θ)>0、クラス2はf(x;θ)<0、識別境界はf(x;θ)=0 -
生成モデル
クラス1はp(x|ω1)の分布、クラス2はp(x|ω2)の分布で、P(ω1|x)>P(ω2|x)のときクラス1、P(ω1|x)<P(ω2|x)のときクラス2、識別境界はP(ω1|x)=P(ω2|x)
同じような説明が http://lang.sist.chukyo-u.ac.jp/classes/AI/2017/AI-11.pptx にも見られます。
数式なしの説明なので、こちらのほうが分かりやすいかもしれません。
- 識別モデル
- 正事例と負事例を区別するための境界線を訓練データから直接的に求めようとする.
- 生成モデル
- 分類対象となるデータがどのような確率モデルから生成されたかをモデル化し,そのモデルに基づいて分類を行う.
生成モデル・識別モデル・識別関数
最初に記載した3つに分ける方法です。
http://www.ieice.org/~asn/201501_sogo/201503_tutorial_hino.pdfのp.19によると
生成モデルと識別モデルの説明は、NAISTの講義資料と同様です。 なお、モデルの作り方によるのかもしれませんが、ニューラルネットワークは識別関数というよりは識別モデルでしょう。例えば、最終層をソフトマックスにして多クラス分類ができるように構成すると、ニューラルネットワークの各クラスの出力は事後確率になります。 さらに次のページに
- 生成モデル:あるクラスyが確率p(y)で選ばれ、そのクラスから特徴量xが確率p(x|y)で生成されたという考え方: p(y|x)=p(x|y)p(y)p(x) 例 naïve Bayes
- 識別モデル:事後確率p(y|x)を、学習データDから直接推定するアプローチ
例 ロジスティック回帰、CRF(Conditional Random Field)- 識別関数:事後確率のことは考えず、直接的に出力を当てる機械fを設計するアプローチ
例 SVM、ニューラルネットワーク
p(y,x),p(y|x),or f:x↦yのように、各手法の特徴も記載されています。学習が難しい順に、生成モデル・識別モデル・識別関数となります。同様に、得られる情報が多い順は、生成モデル・識別モデル・識別関数となります。
- 生成モデル:クラス事後確率を求めるのにBayesの定理を用い,結果として同時分布をモデル化しているのと等価
メリット データの周辺分布を求めることができて,それを外れ値検出などにも利用できる.
デメリット 高次元の特徴量に対する条件付き密度を十分な精度で求めるのが困難- 識別モデル:クラス事後確率を直接モデル化
メリット 生成モデルより計算資源を節約できる(識別に必要な事後確率を直接求めているから)
デメリット 事後確率以外の情報は得られない- 識別関数:入力からクラスラベルに直接写像する関数を求める
メリット 分布の推定を伴わないのでデータ数が少しですむ
デメリット 出力に確率としての解釈が与えられない
PRML[2]にも記載があります。適当に抜粋・意訳すると、
分類問題は推論と決定の2段階に分けられる。推論段階では事後確率p(Ck|x)を計算し、それに基づき決定段階でクラスを決める。また識別関数を使うとこれらを一括で行うことができる。これらは次の3つの方法で実現できる。です。言いたいことは同じですね。
- 生成モデル
各クラスのクラス条件付き密度 p(x|Ck)と事前確率p(Ck)を計算する。その後、ベイズの定理 p(Ck|x)=p(x|Ck)p(Ck)p(x) で事後確率p(Ck|x)を計算する。同時確率p(x,Ck)を直接計算し、正規化することで事後確率を求めることもできる。- 識別モデル
事後確率p(Ck|x)を直接モデル化するアプローチ。- 識別関数
入力xを直接クラスのラベルへ変換する識別関数f(x)を見つけるアプローチ。 例えば2クラス問題なら、クラスC1はf=0、クラスC2はf=1とする。 確率は出てこない。
参考文献
[1] わかりやすいパターン認識, ISBN4-274-13149-1, 1998
[2] Pattern Recognition and Machine Learning, ISBN 978-0-387-31073-2, p. 43, 2006
0 件のコメント :
コメントを投稿