ニューラルネットワークで2クラス分類してみた
概要
- ニューラルネットワークで2クラス分類器を実装した
- よい精度が出なかった(識別精度58.9%)
- よい精度が出なかったのは、そもそも分類に有用な特徴がデータセットに含まれていなかったからであった(以下の図は、8つの特徴と、それに対応した2クラス(赤・青)の散布図行列)
いきさつ
『ゼロから作るDeep Learning』(斎藤 康毅 著/オライリー・ジャパン)という本がラボの書架にあり、ニューラルネットワークの仕組みとPythonでの実装との対応の説明が詳しくなされていたので、知識の確認と、それを実際に動かす目的で読んでいました。
本ブログでは、実際にニューラルネットワークを学習させ、分類させてみた話をします。
実験
UCI(カルフォルニア大学アーバイン校)が公開している機械学習用のデータセット(UCI Machine Learning Repository)の一つに、Abalone(アワビ)のサイズと年齢に関するデータセット Abalone Data Set があります。
このデータセットは、次のような属性から成ります。
この実験では、上8つのアワビの身体的特徴を用いて、そのアワビのSex(雌雄)を分類してみます。つまり、与えられたアワビの身体的情報から、そのアワビがオスかメスかを分類します。
ネットワークは次のように構成します。
学習用データ数2552、テストデータ数283として、次の表に示すパラメータで学習します。
ネットワークの出力層にSoftmax関数を用いることで、2ユニットの出力は[0,1]のレンジをとるように正規化されます。これを入力データ(を与えるアワビ)が、雌である確率、雄である確率のようなものとして考えることができ、分類は
ならば 雄
ならば 雌
として行うことができます。
実験結果
雌雄の分類精度は、テストデータに対して58.9%でした。
考察
入力によらずランダムにクラスを判定する分類器があるとすれば、そのような2クラス分類器は50%の精度を出すでしょう。このようなランダムな分類器が、283個のテストデータのうち58.9%を正しいクラスに分類する確率は計算により0.00275(0.275%)となります。よって、今回実験によって学習したネットワークは、統計的有意に、ランダムな分類器よりは高い精度を持つと言えます(統計にはあまり自信がありませんので間違っているかもしれません)。しかし,この58.9%というのは高い識別精度であるとは言えません。
以下の図は,このデータセットの散布図行列を示しており、赤青のプロットは雌雄に対応しています。対角線上の分布が示すように、これらの8つの特徴は、雌雄を分類するうえであまり有用ではないことがわかります。つまり、そもそも雌雄の2クラス分類が困難なデータセットであったと言えます。
結論
最初から散布図行列を可視化するといったことをして,果たして予測が可能なデータなのか,有用な特徴が含まれているデータなのかを知ることが必要だとわかりました!