【超入門、ニューラルネットワーク】Kerasで2値分類 〜超簡単な例〜

今回はKerasを使ってニューラルネットワークを実装して、
2値分類をやってみます。

超初心者向けの内容になります。

Kerasとは

Kerasは、ニューラルネットワークを非常にシンプルに構築できるライブラリです。

Home - Keras Documentation
Documentation for Keras, the Python Deep Learning library.

TensorFlow等で書くとかなり長くなってしまうコードがKerasを使うことでシンプルなコードとなります。

ちなみにKerasは下でTensorFlow等が動いています。

2値分類タスクとは

今回は2値分類タスクを扱います。

分類タスクとは、ある入力データが与えられたら、そのデータがどのカテゴリ(またはクラス)に属しているかを予想するタスクです。

医療で言えば、患者の症状(入力データ)が与えられたら、その症状によって病気(カテゴリ)を予測するといったものです。

2値分類タスクはカテゴリが2種類だけの最もシンプルな分類問題となります。

Kerasを使って2値分類をしてみる

今回は非常にシンプルな2値分類タスクをKerasを用いたニューラルネットワークによって解きます。

問題設定

入力データ\(x\)(黒い点)が関数\(f(x)=x^2\)の上に位置するか下に位置するかを分類するタスクを用います。

つまり、入力データ\(x\)(黒点)に与えられたら、それが関数\(f(x)\)の上もしくは下どちらかを出力するニューラルネットワーク(モデル)を作成します。

実装(ソースコード)

では、実装していきます。
まず、必要なライブラリ等をimportします。

データの作成

学習、テスト用のデータを生成します。

入力データXとラベルデータYを初期化します。

次にラベルの設定をします。
今回はシンプルな二次関数\(f(x) = x^2\)が境界線となりますので、
この二次関数より上なら1、下なら0となるように各データにラベルをふります。

データをプロットしてみましょう。

ラベルデータをone-hot encodingしていきます。
0 → [0, 1] 、1 → [1, 0]と変換します。

作成したデータを学習用とテスト用にわけます。

このデータを使ってモデルの学習と評価をしていきます。

モデルの構築・学習・評価

では、モデル(ニューラルネットワーク)を作成します。
今回は以下の図のようなニューラルネットワークを構築します。

Sequentialでシンプルなモデル(入力から出力に流れていくネットワーク)を初期化します。
このSequentialモデルに層を追加していきます。
Denseで全結合の層を表しています。
Activationで活性化関数を指定しています。
今回はsigmoid関数とします。
出力はone-hot-encodingで2値分類をするので、出力数は2になります。
([1, 0]で0、[0, 1]で1を表現するので)

モデルをコンパイルします。
ここで、誤差関数や最適化手法を設定します。

modelはfitメソッドによって学習を実行します。
nb_epochはエポック数、つまり、学習回数です。
batch_sizeは一度の学習に使うデータ数です。

学習過程をプロットしてみます。
正答率と誤差の推移をプロットします。

accが正答率、lossが誤差を表しています。
epoch(学習回数)が進むに連れて、正答率が向上して、誤差が小さくなっていることがわかります。
うまく学習が進んでいるようです。

学習し終えたモデルを使って評価しましょう。
evaluateメソッドによってテストを行います。
先程test用に分けたデータを使って評価します。

以下はテストデータで評価した結果になります。

Test scoreが誤差、Test accuracyは正答率を表しています。
正答率が99.5%ですのでけっこう良くできていることがわかります。

簡単な問題ですので、簡単なモデルでもうまく分類できていることがわかります。

ソースコード全体像

参考文献

直感 Deep Learning ―Python×Kerasでアイデアを形にするレシピ
kerasを使ったニューラルネットワークモデルをたくさん紹介してくれています。

タイトルとURLをコピーしました