# Keras読込
from keras.models import Sequential
from keras.layers import Dense
from keras.wrappers.scikit_learn import KerasRegressor

# モデル生成用関数
def reg_model():

reg = Sequential()

reg.add(Dense(10, input_dim=len(x_cols), activation='relu'))
reg.add(Dense(16, activation='relu'))
reg.add(Dense(1))

reg.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])
reg.summary()

return reg


# モデルの取得
model = KerasRegressor(build_fn=reg_model, epochs=200, batch_size=16, verbose=0)

# 学習
model.fit(X_train, y_train)

# スコア(参考値)
model.score(X_test, y_test)



ここが核。


今まで用意してきたデータ。


次は計算式です。


ここも理解が薄くて、よくわかっていない。


最初の


def reg_model():


ここは関数の宣言。ref_modelで呼び出せるようにしてる。


で、中身です。


reg = Sequential()


regは、シーケンシャルですよと宣言していますが、シーケンシャルの意味が分かりません。


ここも定義で。


「シーケンシャルは人工知能の設計図のこと」


この解釈で大体、いいとは思う。


次の行

reg.add(Dense(10, input_dim=len(x_cols), activation='relu'))

最初の reg.add は、 さきほど書いた定義に合わせて言うと


「regという人工知能の設計図に書き加えるよ!」と言ってます。


書き加える内容は、カッコの中です。


カッコの中を見ます。

Dense(10, input_dim=len(x_cols), activation='relu')

最初にDense(10,~~~)とありますね。


これは、10個のニューラルを用意することを宣言ですね。

ニューラルは、前に書いたこれ↓




この画像の右側の丸を10個とするわけです。


で次に、input_dim=len(x_cols)は、入力層のニューラルの数を指定しています。


当然ここでは、x_colsの要素数分だけニューラルが必要ですね。


なので、lenで要素数を出しています。


次に、activation='relu'です。


これは、活性化関数と言いますが、・・・・計算の仕方を指定するという見方でいいかもしれません。


ここでは、reluと指定してます。


他にもsoftmax, sigmoidとかある。


次の行

reg.add(Dense(16, activation='relu'))

また同じように見えますが、inputがありません。


これは中間層です。


この真ん中↓



今度は、ニューラルは、16個だそうです。


そして出力層↓
reg.add(Dense(1))

ニューラルは、1個。つまり答えがここに来ます。


次の行

reg.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])

これは、計算で誤差が出た場合、修正の方法を指定しています。


これ全般、よくわかっていないので、このままでいいのでは?と思っています。


損失関数というらしいです。

次の行
reg.summary()

これ最初分からないかったんですが、ログの出力でした。


これを入れると画面にこれが表示されます。




無かったら、表示はされません。計算に影響しません。


最後が


return reg

これは、計算終わったデータを呼び出し元に返してます。



ここまでがdefで宣言したreg_model



次の行
# モデルの取得
model = KerasRegressor(build_fn=reg_model, epochs=200, batch_size=16, verbose=0)


さっきまでは、モデルの中を構築して計算式を書いていきました。モデル自体の設定です。


中の解説を。KerasRegressorというのは、カッコで書かれてる設定のモデルに使うよ!と宣言みたいなもんです。

build_fn

built_fnというのは、計算するモデルを指定します。


さっき、def reg_model()という名前で書きましたね。


なので、built_fn = ref_model



次のepochs


これは、回数です。学習の回数を設定できます。このソースでは200回繰り返し学習。


ここは、上げすぎると過学習と言っても、予測が悪化することもあります。



次のbatch_size


これは、数字が大きければ、メモリを消費し速くなるらしい。 したことないからわからない。


verboseは、、、分からない。なんだろう?


いよいよ学習ですね。これです↓
# 学習
model.fit(X_train, y_train)

これは、学習です。fitはパラーメータと言いましたが、そのとおりで、


X_trainにあるデータを何か計算して答えがy_trainになるパラメーターを探します。


次の行

# スコア(参考値)
model.score(X_test, y_test)

さっき学習したので、X_testを試しにやってみて、y_testになるかを検証します。


このscoreは次回の記事にちょっと絡みます。

一応、ここまで