[Pythonコードあり] iterative Gaussian Mixture Regression(iGMR)で欠損値を補完しましょう!(目的変数があってもなくても構いません)

シェアする

下図のような欠損値 (欠損データ) のあるデータセットがあるとします。穴あきのデータセットですね。

こんなときに、穴の空いたところである欠損値を補完する方法を提案します。上の図のようなデータセットを下図のようにできます。

最も単純な方法は、欠損値を同じ変数 (特徴量) の平均値で補完する方法です。ただ、この方法では1 つの変数の情報しか用いてなく、同じ変数の欠損値はすべて同じ値になってしまい、あまり適切ではありません。他の変数の情報も使って、欠損値を推定して埋めたほうが、適切な値になりそうですよね。

というわけで、ランダムフォレストを用いた方法や、生成モデルを用いた方法1, 2 などがあります。ランダムフォレストの方法にはパッケージもあります。R はこちら、Python はこちら

今回は、Gaussian Mixture Regression (GMR) を繰り返し用いて欠損値を補完する方法を提案し、Python コードを公開します。繰り返し GMR を用いるので、iterative GMR (iGMR) とでも呼びましょうか。GMR についてはこちらをご覧ください。

[Pythonコードあり] 教師あり混合ガウスモデル(Supervised Gaussian Mixture Models)で回帰分析も逆解析も自由自在に♪~Gaussian Mixture Regression(GMR)~

Gaussian Mixture Models (GMM) により、すべての変数の間の同時確率分布が得られますので、欠損値を含むサンプルにおいて、欠損値でない変数の値から GMR で欠損値を推定できます。iGMR の流れは以下のとおりです。

  1. 元のデータセットを D とする
  2. D における欠損値の場所を M とする
  3. D の中で、欠損値のないサンプルのみ選択し、X とする
  4. X を用いて GMM を構築する
  5. 構築した GMM により、D の欠損値をふくむ各サンプルにおいて、M 以外の変数の値を用いて GMR で M の値を推定する
  6. M の推定値で D を更新し、X とする
  7. 繰り返し回数の上限になるまで、4. から 6. を繰り返す

Python コードはこちらにあります。

https://github.com/hkaneko1985/sgmm

デモンストレーションのプログラムは demo_gmm_with_interpolation.py です。サンプルデータセットとして、あやめのデータセット に欠損値を入れた iris_with_nan.csv があります。実行すると、欠損値が補完されて、interpolated_dataset.csv というファイルに保存されます。

iris_with_nan.csv と同じデータ形式にすれば、他のデータセットでも欠損値を補完できます。ちなみに、データセットは目的変数があってもなくても構いません。目的変数があって、そこに欠損値もあれば、いわゆる回帰分析と同じになります。

必要がありましたらぜひご利用ください。

以上です。

質問やコメントなどありましたら、twitter, facebook, メールなどでご連絡いただけるとうれしいです。

シェアする

フォローする