スポンサーリンク

GoogleColaboratory上で「PythonとKerasによるディープラーニング」を写経してみる(3)「多クラス分類の例:ニュース配信の分類」

PythonとKerasによるディープラーニング」を、Google Colaboratory上で写経して、理解しようとしています。

前回は、第3章を最初の部分「二値分類の例:映画レビューの分類」を写経してみました。

http://twosquirrel.mints.ne.jp/?p=27159

今回は、その続きで、第3章の、「多クラス分類の例:ニュース配信の分類」を写経してみたいと思います。

(開発環境)
Windows 8.1 Pro (MacでもLinuxでも同じです。)
Chrome
Google Colaboratory (Googleアカウント必要、無料)
Keras をインストール済み(こちらを参照)

(1)Reutersデータセット

1986年にReutersによって配信された短いニュース記事と、それらのトピック(46種類)を集めたもの。

テキスト分類用の単純なデータセットとして有名。

Kerasの一部としてパッケージされている。

各サンプルは整数(単語のインデックス)のリストとなっている。

この整数のリストを、単語に戻してみる。

なんか変な文章だが、とりあえず、次へ行く。

(2)データの準備

データのベクトル化は、二値分類のときと全く同じコード。

ラベルのベクトル化は、以下の2つの選択肢がある。

●ラベルのリストを整数のテンソルとしてキャスト(型変換)する方法

●one-hot encoding (= categorical encoding)  ←こちらを用いる

# Kerasでは、ラベルのベクトル化を簡単に行うことができる
from keras.utils.np_utils import to_categorical

(3)ニューラルネットワークの構築

損失値と正解率をプロット

過学習

ランダムに並べ替えたときに正解率が18%とのことなので、正解率78%という値は、悪くはないということになる。

新しいデータで予測値を生成する

(7)十分な大きさの中間層を持つことの重要性

2つ目の中間層を4次元とした場合

PythonとKerasによるディープラーニング」のp86では、正解率71%と書いてあったが、私の場合はもっと悪く、61%くらいであった。とにかく、中間層の次元が低すぎると、正解率が下がるということらしい。。。

(9)まとめ

データ点をN個のクラスに分類しようとする場合、ネットワークの最後の層は、サイズがNのDense層でなければならない。

多クラス単一ラベル分類問題では、ネットワークの最後の層の活性化関数としてsoftmaxを使用する。

損失関数は、categorical_crossentropy (多クラス交差エントロピー)を用いる。

<多クラス分類でラベルを扱う方法>

(1)カテゴリエンコーディング(one-hot encoding)を用いてラベルをエンコードし、損失関数としてcategorical_crossentropyを使用する。

(2)

今回もなかなか面白かった。初めて機械学習の勉強をするときにこの本「PythonとKerasによるディープラーニング」を読んでもさっぱり分からないかもしれない。しかし、「ゼロから作るDeep Learning」「ゼロから作るDeep Learning ❷」を何回も読んだ後、この本を読むと、簡潔にまとめられていて、よい復習になって、頭の中が整理されていきます。

次は、「PythonとKerasによるディープラーニング」の第3章の3.6 回帰の例:住宅価格の予測 を写経してみたいと思います。