mikemoke blog

ビジネスに関心があるデータ解析系さらりーまん。データ解析・ビジネス・エンジニアリングについての知見を纏めています。

実装:SGDでロジスティック回帰

SGDに向けて尤度関数の導関数を導出します。

まずロジスティック回帰の式は以下

{ \displaystyle
p(C_1|\bf{\phi}) = y(\phi) = \sigma (\bf{w^T} \bf{\phi})
}

\sigmaシグモイド関数であり
{\displaystyle
\sigma(x)=\frac{1}{1+exp(-x)}
}
{\displaystyle
\frac{d\sigma}{dx}=\sigma(1-\sigma)
}

次に尤度関数は

{\displaystyle
p({\bf t}|{\bf w})=\prod_{n=1}^{N} y_n^{t_n} \{1-y_n^{1-t_n}\}
}
負の対数尤度関数より、誤差関数として定義
{\displaystyle
E({\bf w})=-\ln p({\bf t} | {\bf w}) = -\sum_{n=1}^{N} \{ t_n \ln y_n + (1-t_n) \ln (1-y_n) \}
}

 \bf wについて勾配をとって
{\displaystyle
\bigtriangledown E({\bf w}) = -\sum_{n=1}^{N} \left\{ t_n \frac{1}{y_n} \frac{\partial y_n}{\partial w} + (t_n-1) \frac{1}{1-y_n} \frac{- \partial y_n}{\partial w}  \right\}
}
{\displaystyle
\frac{\partial y}{\partial w} = y(1-y)\bf{\phi} 
} より
{\displaystyle
\bigtriangledown E({\bf w}) = -\sum_{n=1}^{N} \left( y_n - t_n \right) \phi_n
}

SGDにより各データについて勾配情報を差分する

{\displaystyle
{\bf w} ={\bf w} -\left( y_n - t_n \right) \phi_n
}

実装コード要約

  • 乳癌データインポート
  • 内容の確認
  • negative/positive群のヒストグラム比較
  • feature間の相関テーブル・ヒートマップを確認
  • 最適化処理実装
  • 最適化実行(loss計算失敗)
  • クロスバリデーション: Accuracy 0.892
  • 最適化実行(feature正規化してloss計算実施)
  • クロスバリデーション: Accuracy 0.946


所感:

featureの正規化するだけで結構性能が変わる。
他の最適化手法を適用して、比較分析したい。