今日はニューラルネットワークを用いた分類をpythonを用いて実行するプログラムの説明です。ニューラルネットワークは、以前の「複数の情報から判断するシステム」「隠れて役に立つ」の説明をご覧ください。
資料はこちら → 機械学習3
p.1 特徴2、種類(クラス)3の分類を実行した図です。水色と緑の境界が曲線になっています。これは超平面を2次元に描いたためです。
p.2 ニューラルネットワークでは、損失関数を用いて学習効果を見ておく必要があります。
損失関数は、分析結果とターゲット(正解)が一致すると0となります。 シナプス強度を調整することにより損失関数が0になるように学習していきます。この時、勾配降下法や最急効果法を用いて調整します。勾配降下法は過去「最短ルートは?」「何度も何度も」で説明しました。
p.3、4 今回のプログラムです。3,21および27行が今回のニューラルネットワークに関わるコードです。21行にあるように、今回は多層パーセプトロン分類器MLPClassfier(Multi-layer Perceptron Classfiier)という分類器を用います。「clf」は、この分類器の略語です。「Hidden_layer」とは、日本語で「隠れ層」と呼ばれる中間層です。例えば100個のニューロンを1個の中間層にして出力に0か1をアウトプットします。 学習するステップ数や、アウトプットの数値の差に閾値を設定します。
プログラムコードは→ P0501-2
p.5 損失関数を縦軸にした場合のイメージ図です。山谷が幾つもあり、谷が最適解ですが、最低の最適解は一つで、それ以外は局所最適解です。
p.6 特徴量を2から4に増やしたプログラムです。 → P0502-4
p.7 損失関数は、一定値に収束しているように見えますが、予測した出力値とターゲット(正解)をプリント文で表示すると、2箇所が不一致のため、正解率は99.97%でした。
p.8 15行目を青線枠内のように書き換えて学習を長くさせます。損失関数が50000のまでは0まで落ちていません。この部分は局所最適値の谷にいて、準安定状態にいるのでしょう。50000回を超した当たりで0になりました。 処理スピードが遅いパソコンでは2時間以上かかることもあると本に記載されていましたので、恐る恐る実行してみましたが、1分程度学習して結果を出してくれました。ほっ~と。 正解率は100%でした。 もっと速度を上げるには、シナプス強度の調節のところで、分割して最適値を求める方法もあるそうです。