multivariate regressionをkerasで

複数出力の回帰をKerasで行います。

通常、回帰分析は複数の説明変数に一つの目的変数なのですが、これは、複数の目的変数を取ることができます。
multivariateとmultivariableの違いはこのあたりを参照のこと。

コードはこちらを参考にこんな感じ。


import numpy as np
from keras.layers import Dense,Activation
from keras.models import Sequential
model = Sequential()
model.add(Dense(16, input_shape=(1,)))
model.add(Activation('relu'))
model.add(Dense(16, input_shape=(1,)))
model.add(Activation('relu'))
model.add(Dense(2))
model.compile(loss='mean_squared_error', optimizer='Adam')


inputs = np.zeros((10, 1), dtype=np.float32)
targets = np.zeros((10, 2), dtype=np.float32)

for i in range(10):
    inputs[i] = i / 10.0
    targets[i, 0] = 1.0-0.1 * i / 2.0
    targets[i, 1] = 0.01 * i

model.fit(inputs,targets,epochs=200,batch_size=5)

print(targets)
print(model.predict(inputs))


結果

[[1.   0.  ]
 [0.95 0.01]
 [0.9  0.02]
 [0.85 0.03]
 [0.8  0.04]
 [0.75 0.05]
 [0.7  0.06]
 [0.65 0.07]
 [0.6  0.08]
 [0.55 0.09]]
[[0.88971126 0.00797045]
 [0.9289691  0.02162787]
 [0.8843044  0.02890772]
 [0.8396398  0.03618753]
 [0.7949753  0.04346737]
 [0.7503106  0.0507472 ]
 [0.70564604 0.058027  ]
 [0.6609814  0.06530684]
 [0.61631685 0.07258669]
 [0.57165223 0.0798665 ]]

ちゃんと学習できているようです