【Scikit-learn】ニューラルネットワーク(多層パーセプトロン・MLP)

Pythonと機械学習ライブラリ「scikit-learn」によるニューラルネットワーク(多層パーセプトロン・MLP)の使い方についてまとめました。

【はじめに】ニューラルネットワークとは

ニューラルネットワーク (Neural network)とは、人の脳内にある神経回路を参考にした学習モデルです。
多層パーセプトロン(MLP)とは、パーセプトロンを複数繋いで多層構造にしたニューラルネットワークです。

【ニューラルネットワーク】基本原理と単純パーセプトロンの学習計算
このサイトでは、ニューラルネットワークの基本原理や特徴(メリット・デメリット)、その計算方法についてまとめました。ニューラルネットワークとは脳内には、ニューロン(神経細胞)が無数にあります。ニューロン同士はシナプスで繋がっています...
【ニューラルネット】多層パーセプトロン(MLP)の原理・計算式
ニューラルネットワーク(多層パーセプトロン・MLP)や特徴や原理、その計算方法についてまとめました。多層パーセプトロン(MLP)とは多層パーセプトロン(MLP)とは、下図のように(単純)パーセプトロンを複数繋いで多層構造にしたニュ...

機械学習ライブラリ「Scikit-learn」では、バージョン0.18.0からニューラルネットワーク(NN)を利用できるようになりました。
今回は、それを用いてCSVファイルのデータを読み込んで学習させてみます。

書式

scikit-learnでは、sklearn.neural_network.MLPClassifierクラスを使うことでニューラルネットワーク(NN)を実装できます。
このクラスは、ニューラルネットワークでよく利用されている多層パーセプトロン(MLP)方式です。

sklearn.neural_network.MLPClassifier(hidden_layer_sizes=(100, ), activation='relu', solver='adam', alpha=0.0001, batch_size='auto', learning_rate='constant', learning_rate_init=0.001, power_t=0.5, max_iter=200, shuffle=True, random_state=None, tol=0.0001, verbose=False, warm_start=False, momentum=0.9, nesterovs_momentum=True, early_stopping=False, validation_fraction=0.1, beta_1=0.9, beta_2=0.999, epsilon=1e-08)

※各パラメータに設定されてる値(=の後)はデフォルト値

パラメータ(引数) 内容
hidden_layer_sizes=(100, ) 隠れ層のノード数(多層化可能)
activation=’relu’ 活性化関数(identify, logistic, tanh, relu)
solver=’adam’ 最適化手法(lbfgs, sgd, adam)
alpha L2ペナルティ(正則化の項)
batch_size=’auto’ 最適化のバッチサイズ(sgd、adam用)
learning_rate 重み更新のための学習率スケジュール(’定数’、 ‘invscaling’、 ‘adaptive’)
max_iter=200 反復の最大回数
shuffle 反復する度にサンプルをシャッフルするか(solverが’sgd’か’adam’の時に使用)
random_state 乱数生成の状態 or シード(int、RandomState)
tol 最適化の許容誤差
power_t スケーリング学習率の指数
verbose 進捗メッセージを標準出力するかどうか
warm_start 以前の呼び出しの解を再利用して初期化するかどうか
momentum 勾配降下更新のモメンタム
nesterovs_momentum 訓練データの10%が妥当性検査として自動設定され、2つの連続したエポックで少なくとも妥当性スコアが改善していない場合は訓練終了(solver = ‘sgd’または ‘adam’で有効)
early_stopping 検証スコアが改善されていないとき訓練中止のために早期停止を使用するかどうか
validation_fractionv 早期停止のための妥当性確認として設定される訓練データの割合
beta_1 adamの第1モーメントベクトルの推定値に対する指数関数的減衰率
beta_2 adamの第2モーメントベクトルの推定値に対する指数関数的減衰率
epsilon adamの数値安定性の値(solver = ‘adam’で使用)

【参考文献】 http://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPClassifier.html#sklearn.neural_network.MLPClassifier

ソースコード

サンプルプログラムのソースコードです。


表示されない場合は、「https://github.com/nishizumi-lab/sample/blob/master/python/scikit/mlp/ex2.py」をご覧ください。

学習用データ


テスト用データ


【応用】決定境界の可視化、、データセットの利用

コラム 概要
決定境界の可視化 決定境界の可視化について解説しています。
アヤメの品種分類 Irisデータセットを使ったアヤメの品種分類について解説しています。
手書き数字の認識 Digitsデータセットを使った手書き数字画像の認識について解説しています。
【Scikit-learn】機械学習入門・使い方・読み方
この記事では、Pythonモジュール「Scikit-learn」で機械学習を行う方法について入門者向けに使い方を解説します。

コメント

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