工学系大学院生のブログ

2人の大学院生による雑記ブログ

第1-4回 数学から見るニューラルネットワーク [python]



 前回までで,ニューラルネットワークの概要を説明してきました.



 今回は,これまでの内容をまとめて実装します.



1 タイタニック号



 ここでは、1層のニューラルネットワークによる機械学習を行います.



 対象とするのは、kaggleのチュートリアルであるタイタニック号の乗客の生死です.(kaggleは企業とエンジニアをつなぐプラットフォームで、テスト用のデータが豊富にあります.)

 このチュートリアルでは、タイタニック号の乗客のデータ(性別や年齢、搭乗した港など)と事故による生死の結果が与えられます.そのデータを学習し、船員の生死(0 or 1)を予測します.



 まず、データの整理を行います.


 データは十分ではなく、虫食い状態なのでその穴を何らかの方法で埋めなければなりません.また、数値として扱うため各値を数字に変換しました.

 今回は、下記のように変更しました.



 計算の際は、各項目についてそれぞれの最大値で除することで規格化しています.また、名前やチケット、キャビンも数字にしていますが、特に使用しないため、すべて同じ数字を入れています.



 ニューラルネットワークの計算における値等は下記の表の通りです.ここまでで説明していないチューニングパラメータがありますが,これは第1-A回で説明します.



 ただし、入力データのうち Name, Ticket, Cabinは同一の値であるため、実質7つの入力データとなっています.

 今後、上記の三つを差別化するときに備えて学習に使用しています.



2 学習結果

 学習結果の評価にあたり、正答率で評価を行います.



 test用データと学習に使用したtrainデータの正答率を下記に示します.重みの初期値がランダムですので、2回行った結果を示します.

case 1

case 2



 正答率はどの結果でも,学習回数を増やすほど上昇していることがわかります.


 また,80 %程度が上限のような結果となりました.


 考察として2点述べます.
 


 1点目として、値は常に収束方向に向かうわけではなく、外れた点も存在していることです.これは、オンライン処理により勾配方向がランダムに変わる事が影響しているち考えられます.


 本解析では,進展距離を一定にしているため、最下点に近いときは離れる方向に進んでしまう.勾配が急なところでは進む距離を増やし,勾配が緩やかであれば進む距離を減らすと外れ値に飛ぶことは少なくなるかと思います.




 2点目として、学習の閾値が存在していることです.
 

 これは、層数が影響していると考えられます.

 本手法は 1層しか考えていないため、今回の分布を表す関数としては不十分であり、層数を増やし出力を複雑な関数にすることでより良い近似が可能であると考えます.



 使用したコードはGithubにアップしています.



 ここまで読んで下さりありがとうございます.


 実装に関する細かい点は,第1-A回にまとめたいと思います.



hide

このエントリーをはてなブックマークに追加

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です