質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

3521閲覧

ニューラルネットワークのパラメータの最適化でグリッドサーチを用いると、毎回異なる結果が出力されるのはなぜでしょうか?

melo_yuya

総合スコア16

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/01/10 05:17

ニューラルネットワークでのクラス分類を行うのに、パラメータ(隠れ層・最大反復学習回数)の最適化を行おうとしました。最も最適化手法として有効であるのが、交差検証を用いたグリッドサーチと思われたのでGridsearchCVを使ってみました。以下が用いたコードとなります。

Python

1import pandas as pd 2import numpy as np 3from sklearn.model_selection import train_test_split 4from sklearn import preprocessing 5from sklearn.neural_network import MLPClassifier 6from sklearn.model_selection import cross_val_score 7from sklearn.model_selection import GridSearchCV 8 9#csvファイルの読み込み 10df = pd.read_csv('sasayama_2019.csv', 11 encoding = "shift-jis", 12 skiprows = 1, 13 names = ['ID','dummy1','dummy2','dummy3','dummy4','dummy5','dummy6','dummy7','dummy8','dummy9','dummy10','menseki','totiriyou','dummy11','dummy12','0722R','dummy13','0604R','dummy14','0611R','dummy15','0525A','dummy16','0606A','dummy17','0513A','R_avg','A_avg','rorn']) 14 15#使わない列の削除 16sasa=df.drop(['dummy1','dummy2','dummy3','dummy4','dummy5','dummy6','dummy7','dummy8','dummy9','dummy10','dummy11','dummy12','dummy13','dummy14','dummy15','dummy16','dummy17'],axis = 1) 17sasa = sasa.dropna(how='any') 18 19#説明変数の選択 20#Sentinel-1Aの3時期+RADERSAT-2の3時期(列の抽出) 21X=sasa.iloc[:,3:9] 22#目的変数(土地利用)の設定 23y=sasa['totiriyou'] 24 25#教師データとテストデータの分割 26X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0) 27 28#標準化 29scaler = preprocessing.StandardScaler() 30scaler.fit(X_train) 31X_train = scaler.transform(X_train) 32X_test = scaler.transform(X_test) 33 34param_grid = {'hidden_layer_sizes': [(100,100),(10,10),(100,),(10,)], 35 'max_iter': [10000,1000,100,10]} 36 37grid_search = GridSearchCV(MLPClassifier(), param_grid, cv=5) 38grid_search.fit(X_train, y_train) 39print("P.260~") 40print("Test set score: {:.2f}".format(grid_search.score(X_test, y_test))) 41print("Best parameters: {}".format(grid_search.best_params_)) 42print("Best cross-validation score: {:.2f}".format(grid_search.best_score_)) 43print("Best estimator:\n{}".format(grid_search.best_estimator_))

しかし、最適化された結果として出力されるパラメータは毎回異なっていました。なぜこのような結果となっているのか教えていただいてもよろしいでしょうか。

機械学習を始めて間もないため、簡単なことかもしれれませんが、よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

MLPClassifierにもrandom_stateがあるので、設定してみてください。

python

1grid_search = GridSearchCV(MLPClassifier(random_state=0), param_grid, cv=5) 2

sklearn.neural_network.MLPClassifier — scikit-learn 0.22.1 documentation

投稿2020/01/10 05:25

hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

melo_yuya

2020/01/10 05:41

回答ありがとうございます。 random_state=0 とすることで1つのパラメータを指定することが出来ました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問