ニューラルネットワークの中身 [データサイエンス、統計モデル]
ニューラルネットワークは良くブラックボックスといわれるが、中身を解体?してみた。
1. まず、SPSS Clementine(クレメンタイン)でモデルを作る。
モデルノードはニューラルネットワーク。
2. パレットにあるダイヤモンドをPMML形式でエクスポートする。
3. XML形式でモデルの中身を見ることができる。
書かれている内容は、各変数からの各中間ノードへの重みとバイアスが書かれている。
Si: 中間ノードi
bi: バイアス
wi: 重み
ui: 変数i
となる。
また、これらの中間ノードから、最終的な出力値は、
ui = f( Si )
で計算できる。
関数 f( x ) としては、
が有名な関数(シグモイド関数)だ。
注意として、入力する変数がたとえば、年齢や年齢の場合、そのまま年齢や年齢の値が変数として使われるのではない。
当然といえば当然で、年齢と年収では、単位が全く異なるため、0~1の範囲に変換している。
正規化っぽいイメージ。
また、予測するものが 0 or 1 ではなく、期待購入金額であった場合は、最初の出力値も、0~1の範囲になっているので、元に戻す作業が必要になる。
一度、自分で PMML のアウトプットから中身を紐解いてみるのも良いと思う。
たくさんの変数を使って、中間ノードとかもたくさん作るとイメージし難いので、少数の変数で簡単なニューラルネットワークを作ってみると、イメージしやすい。
1. まず、SPSS Clementine(クレメンタイン)でモデルを作る。
モデルノードはニューラルネットワーク。
2. パレットにあるダイヤモンドをPMML形式でエクスポートする。
3. XML形式でモデルの中身を見ることができる。
書かれている内容は、各変数からの各中間ノードへの重みとバイアスが書かれている。
Si: 中間ノードi
bi: バイアス
wi: 重み
ui: 変数i
となる。
また、これらの中間ノードから、最終的な出力値は、
ui = f( Si )
で計算できる。
関数 f( x ) としては、
が有名な関数(シグモイド関数)だ。
注意として、入力する変数がたとえば、年齢や年齢の場合、そのまま年齢や年齢の値が変数として使われるのではない。
当然といえば当然で、年齢と年収では、単位が全く異なるため、0~1の範囲に変換している。
正規化っぽいイメージ。
また、予測するものが 0 or 1 ではなく、期待購入金額であった場合は、最初の出力値も、0~1の範囲になっているので、元に戻す作業が必要になる。
一度、自分で PMML のアウトプットから中身を紐解いてみるのも良いと思う。
たくさんの変数を使って、中間ノードとかもたくさん作るとイメージし難いので、少数の変数で簡単なニューラルネットワークを作ってみると、イメージしやすい。