KDOG Notebook

どうも、古くからの友人です。

ロジスティック回帰をベイズ推論で実装

はじめに

ツイッター界隈でロジスティック回帰が話題になっていたので、便乗して記事にしてみました。 ロジスティック回帰の実装に関しては下の本を参考にしました。 本記事で用いたデータは下のブログを参照しました。githubに公開されていたので無断で使いました。(へーき?)

機械学習スタートアップシリーズ ベイズ推論による機械学習入門 (KS情報科学専門書)

共役勾配法によるロジスティック回帰のパラメータ推定 - 人工知能に関する断創録

本題

プロットしたものを下図に示します。観測データは2次元で、カテゴリ数は2となっています。 バームクーヘンのようなデータ分布で、概ね外側と内側でカテゴリの異なるデータが偏って分布していることが分かります。

f:id:kdog08:20180526014510p:plain:w300

カテゴリの分布がこのように複雑だと観測データを線形射影してシグモイド関数やソフトマックス関数の入力として渡しても、 人が期待するような回帰はできません(線形射影だから)。 そこで、データの参照先のブログと同様に観測データを累乗の空間に一旦射影した後、得られたベクトルを入力として用いることにしました。 今回は8次の多項式で回帰をしました。結果を下図に示します。各データ点は生起確率が0.5以上となったカテゴリで色分けしました。 概ねカテゴリの分布は上図と一致していることが分かりました。

f:id:kdog08:20180526015426p:plain:w300

ロジスティック回帰の有用性は、各カテゴリの生起確率が予測できることです、と自分は理解しています。 生起確率を直感的に理解するには等高線を描くのが一番だと思いますので、下図に示しました。 図の左および右は、それぞれカテゴリ青およびオレンジの生起確率の等高線を示した図です。 青はプロットの外側に向かって確率が大きくなっています。逆に、オレンジは中心に向かって確率が大きくなっています。 また、場所によって等高線の間隔が広くなっていたり、狭くなっていることも確認できます。

f:id:kdog08:20180526022737p:plain:w600

蛇足

ロジスティック回帰では、ある入力xが与えられたとき、ある事象Aが起きる確率(事象Aの生起確率)をモデルしています。 したがって、学習の結果(2つ目の図)がデータセット{観測データxとカテゴリのラベルy}(1つ目の図)と一致しないことに やたらと気を揉む必要はないと思っています。今回の例では、青の確率が0.9の領域であっても10回に1度はオレンジが現れるわけですから。 もちろん、ロジスティック回帰が本当は10回に1度である事象を過大評価することもあり得ます。 パラメータの推論方法を見直したり、新たにデータを収集する必要があるかもしれません。