🐰

【図解】MLPClassifierの使い方まとめ【Python】

2022/11/10に公開

この記事は、
https://zenn.dev/nekoallergy/articles/sklearn-nn-mlpclf01
の続きです。

上記の記事を読んでからだと、理解がより進むと思います。



Python の基礎を本にまとめています。併せてご覧いただけるととても嬉しいです ↓
https://zenn.dev/nekoallergy/books/python-basic
DeepLearning の基礎を本にまとめています。手に取って頂けるととても喜びます ↓
https://zenn.dev/nekoallergy/books/904df952389317


みなさんの理解が一歩でも進めば嬉しいです。


Created by NekoAllergy

プログラムをみてみる

clf.py
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.neural_network import MLPClassifier

iris = datasets.load_iris()
data_train, data_test, target_train, target_test = train_test_split(iris.data, iris.target)
clf = MLPClassifier()
clf.fit(data_train, target_train)
print(clf.score(data_test, target_test))
結果
0.9736842105263158

結果は0.9736なので、97.4%の精度が出ています。

この AI には、実はいろんなパラメータが設定できます。パラメータを変えると、結果も変わってきます。カスタマイズして、自分だけの AI を作りましょう。とっても楽しいです。

MLPClassifier()を 100%理解するために、
① パラメータを設定
② メソッドを実行
③ 属性を確認
という3つを紹介します。

より精度の良い、信頼できる分類モデルを作るためには必須の知識です!

一覧

① Parameters(パラメータ)は 23 個

MLPClassifier()に、いくつかの引数(Parameters/パラメータ)を渡すことで、いろいろな設定をすることができます。モデルにオプションを付けて、自分好みにカスタマイズできるってことです。

パラメータ 23 個
パラメータの名前 何が設定できるか デフォルトの値(初期値) 設定できる値
1 hidden_layer_sizes 層の数と、ニューロンの数を設定 (100,) tuple 型の数値
2 activation 活性化関数を選択 'relu' ‘identity’, ‘logistic’, ‘tanh’, ‘relu’
3 solver 最適化手法を選択 'adam' ‘lbfgs’, ‘sgd’, ‘adam’
4 alpha L2 正則化の penalty を設定 0.0001 float 型の数値
5 batch_size ミニバッチのサイズを設定 'auto' int 型の数値
6 learning_rate 重みの学習率の更新方法を選択 'constant' ‘constant’, ‘invscaling’, ‘adaptive’
7 learning_rate_init 重みの学習率の初期値を設定 0.001 double 型の数値(‘sgd’と‘adam’の場合のみ)
8 power_t learning_rate の減少速度を設定 0.5 double 型の数値
9 max_iter 学習の反復の最大回数を設定 200 int 型の数値
10 shuffle 反復学習時のデータ・シャッフルの有無 TRUE bool 型の数値(True, False)
11 random_state 乱数生成のためのインスタンスを設定 None int 型の数値
12 tol 学習の収束値を設定 0.0001 float 型の数値
13 verbose 学習の進捗状況の表示の有無 FALSE bool 型の数値(True, False)
14 warm_start 学習済みの重みを使うか設定 FALSE bool 型の数値(True, False)
15 momentum 重みの修正量を設定 0.9 float 型の数値(‘sgd’の場合のみ)
16 nesterovs_momentum 重みの更新を設定 TRUE bool 型の数値(True, False)
17 early_stopping 学習終了値を設定 FALSE bool 型の数値(True, False)(‘sgd’と‘adam’の場合のみ)
18 validation_fraction 検証用データの割合を設定 0.1 float 型の数値
19 beta_1 adam の β1 値を設定 0.9 float 型の数値(‘adam’の場合のみ)
20 beta_2 adam の β2 値を設定 0.999 float 型の数値(‘adam’の場合のみ)
21 epsilon adam の ε 値を設定 1.00E-08 float 型の数値(‘adam’の場合のみ)
22 n_iter_no_change tol で収束しない場合の最大学習回数を設定 10 int 型の数値(‘sgd’と‘adam’の場合のみ)
23 max_fun 損失関数が呼び出される最大値を設定 15000 int 型の数値(‘lbfgs’の場合のみ)

② methods(メソッド)は 7 個

上記で作成したインスタンスにmethods(メソッド)を指示することで、命令を実行できます。

メソッド 7 個
メソッドの名前 使い方 何するか
1 fit fit(X, y) モデルの学習
2 predict predict(X) 学習済みモデルを使って予測
3 predict_proba predict_proba(X) 学習済みモデルを使って予測
クラスごとの確率あり
4 predict_log_proba predict_log_proba(X) 学習済みモデルを使って予測
クラスごとの確率あり(log 表記)
5 score score(X, y, sample_weight=None) 学習済みモデルを使って平均精度を出す
6 get_params get_params(deep=True) モデルのパラメータを取得
7 set_params set_params(**params) モデルのパラメータを設定、変更

③ Attribute(属性)は 11 個

上記で作成したインスタンスのAttribute(属性)を確認することで、そのモデルの情報を知ることができます。

属性 11 個
属性の名前 どんな情報が得られるか 【例】出力される値
1 classes_ class のラベル [0 1 2]
2 loss_ 最終的な Loss 値 0.183425193
3 bestloss 最も精度がいいタイミングの Loss 0.183425193
4 losscurve Loss の推移 リスト型の(300, )の数値
5 t_ 学習したサンプルの総数 36000
6 coefs_ 重みの数値 リスト型の(4, 100)と(100, 3)の数値
7 intercepts_ バイアスの数値 リスト型の(100, )と(3, )の数値
8 niter 合計イテレーション数(繰り返し数) 300
9 nlayers 層の数 3
10 noutputs 出力層のニューロン数 3
11 outactivation 出力層の活性化関数 softmax
attribete.py
#classのラベル
print("classes_ : ", clf.classes_)

#最終的なLoss
print("loss_ : ", clf.loss_)

#最も精度がいいタイミングのLoss
print("best_loss_ : ", clf.best_loss_)

#Lossの推移
print("loss_curve_ : ", np.array(clf.loss_curve_).shape)

#学習したサンプルの総数(120データ×300イテレーション)
print("t_ : ", clf.t_)

#重みの数値  1層目=coefs_[0] 2層目=coefs_[1]
print("coefs_ : ", np.array(clf.coefs_[0]).shape, np.array(clf.coefs_[1]).shape)

#バイアスの数値  1層目=intercepts_[0]  2層目=intercepts_[1]
print("intercepts_ : ", np.array(clf.intercepts_[0]).shape, np.array(clf.intercepts_[1]).shape)

#合計イテレーション数(繰り返し数)
print("n_iter_ : ", clf.n_iter_)

#層の数 (入力層 中間層 出力層)
print("n_layers_ : ", clf.n_layers_)

#出力層のニューロン数(0, 1, 2)
print("n_outputs_ : ", clf.n_outputs_)

#出力層の活性化関数
print("out_activation_ : ", clf.out_activation_)

結果
classes_ :  [0 1 2]
loss_ :  0.18342519272611615
best_loss_ :  0.18342519272611615
loss_curve_ :  (300,)
t_ :  36000
coefs_ :  (4, 100) (100, 3)
intercepts_ :  (100,) (3,)
n_iter_ :  300
n_layers_ :  3
n_outputs_ :  3
out_activation_ :  softmax

まとめ

今回は、scikit-learnのニューラルネットワーク(MLPClassifier)について、次の3つを紹介しました。

ぜひいろいろな数値を調整して試してみてください。

皆さんの理解が一歩でも進んだのなら嬉しいです。
フォロー ♻️、いいね 👍、サポート 🐱 お願いします。とっても嬉しいです。


機械学習をもっと詳しく

DeepLearning の基礎を本にまとめています。手に取って頂けるととても喜びます ↓
https://zenn.dev/nekoallergy/books/904df952389317


ねこアレルギーのAI

ねこアレルギーの AI
YouTube で機械学習について発信しています。お時間ある方は覗いていただけると喜びます。





Created by NekoAllergy

Discussion