機械学習記12日目続き ~ MLP Classifierクラス

 scikit-learnでは、バージョン0.18.0からニューラルネットワークを利用できるようになりました。そこで、scikit-learnのMLPClassfierクラスを使って機械学習を行ってみます。

 MLPClassifierクラスは、多層パーセプトロン(MLP)方式で実装されていて、書式は図1のようになります。

f:id:hackU0001:20190303152818p:plain

f:id:hackU0001:20190303153017p:plain

図1.MLPClassifierの書式

f:id:hackU0001:20190303154512p:plain

図2.MLPlassifier関数の引数と説明

 

ニューラルネットワークでアヤメを分類する

 まずは、MLPClassfierを使って、irisデータセットの分類を作ってみましょう。irisデータセットを読み込み、訓練用のデータと評価用のデータに分けます。

f:id:hackU0001:20190303161207p:plain

 

  MLPClassifierで学習モデルを生成して、fit関数で学習します。パラメータは、すべてデフォルトの状態で使用しています。

f:id:hackU0001:20190303162053p:plain

f:id:hackU0001:20190303162442p:plain

f:id:hackU0001:20190303163001p:plain

 

 ワーニング(警告)が出ました。評価用データを分類して正解率を表示してみます。

f:id:hackU0001:20190303163451p:plain

 少し正解率が低いようです。どうやらワーニング表示されているパラメータ「max_iter」(試行回数の最大値)がデフォルトで少ないのかもしれません。パラメータの値を増やしてもう一度学習させます。

f:id:hackU0001:20190303164217p:plain

 

 試行回数の最大値(max_iter)の値を増やしたらうまくいきました。

f:id:hackU0001:20190303164603p:plain

 正解率が上がりました。ニューラルネットワークは、デフォルトのパラメータ設定がキビシイですね。

 

▶簡易手書き数字データの認識

 digitsデータセットでも確認したいと思います。digitsデータセットを読み込み、訓練用と評価用に分けます。

f:id:hackU0001:20190304100022p:plain

 

 MLPClassifierの学習モデルを生成して学習を行います。パラメータのmax_iterは、1000にしておきます。
f:id:hackU0001:20190304100809p:plain

 

 これで学習が完了したので、精度を評価します。

f:id:hackU0001:20190304101438p:plain

 

 他のアルゴリズムより、若干成績が良い気がします。どのように分類したのか、数字ごとに見てみたいと思います。

f:id:hackU0001:20190304102249p:plain

 こちらもパラメータをいろいろと変更しながら、ミスを犯しやすいデータの特徴などを調べ、試行錯誤する必要があります。ただ、確実にわかったことは、scikit-learnを使えば、ニューラルネットワークをはじめとした様々な機械学習アルゴリズムを、ほとんど同じコードで簡単に試せるということです。