密度比推定としてのAdversarial Validation
Adversarial Validationとは
Adversarial Validationとは、主にKaggleの文脈で使われる言葉です。 TrainデータとTestデータの分布が大きく異なる時に、出来るだけTestデータでの密度が高いデータをTrainデータから選んでValidationデータとして使うための技術です。(適当にValidationを作るとPublic LBと相関が低いValidationデータを作ることになってしまう)
手順としては、
- trainデータに仮のラベル-1、testデータに仮のラベル+1をつける。
- trainデータとtestデータを分類する2値分類器を訓練する。(cross-validation等で)
- 先ほどの分類器にtrainデータを推論させ、trainデータの中でtestデータである確率が高いtopN件をValidationデータとして採用する。
というようなものです。
(参考)
密度比(density ratio)
ここで、次のような式で定義される密度比(density ratio) : を導入することにします。
また、密度比は、ベイズの定理を使って以下のように変形できます。
ここで、trainデータに仮のラベル-1、testデータに仮のラベル+1を振れば、 と はちょうどtrainデータとtestデータを分類する2値分類器によって近似することができます。 また、とは定数で、それぞれtrainデータの数とtestデータの数の割合で近似できます。
結局、密度比は
となります。 NとMはそれぞれtrainデータの数、testデータの数です。また、はtrainデータとtestデータを分類する2値分類器が出力する、データのクラス+1(targetデータ)の確率です。
ここで重要なのは、密度比推定は結局2値分類問題として帰着できることです。
Density Ratio Estimation for KL Divergence Minimization between Implicit Distributions | Louis Tiao (わかりやすい説明がのっています)
密度比はに対して単調増加関数で、での値をとります。以下では簡単のためを想定します。密度比は以下のような形をしています。
Adversarial Validationと密度比の関係
よって、Adversarial Validationが行なっているのは、密度比が高い点をtrainデータから抽出していることになります。
確かに、のようなデータはtestデータの密度が高く、trainデータの密度が低いデータで、「trainデータにはあまり現れないが、testデータにはよく現れるデータ」であると言え、Validationデータとしての価値はかなり高いです。
そして、付近の点はモデルがtrainデータ由来なのかtestデータ由来なのかを見分けることができなかったデータであり、こちらもValidationデータとしての価値があると思われます。
逆に、のようなデータは「trainデータにはよく現れるが、testデータにはあまり現れないデータ」であり、これをValidationデータとして利用するのは危険です。