【図解】MLPClassifierの使い方まとめ【Python】
この記事は、
の続きです。上記の記事を読んでからだと、理解がより進むと思います。
Python の基礎を本にまとめています。併せてご覧いただけるととても嬉しいです ↓
DeepLearning の基礎を本にまとめています。手に取って頂けるととても喜びます ↓みなさんの理解が一歩でも進めば嬉しいです。
Created by NekoAllergy
プログラムをみてみる
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 |
#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 の基礎を本にまとめています。手に取って頂けるととても喜びます ↓
ねこアレルギーの AI
YouTube で機械学習について発信しています。お時間ある方は覗いていただけると喜びます。
Created by NekoAllergy
Discussion