【发布时间】:2019-02-25 18:23:02
【问题描述】:
我使用 Tensorflow (Keras) 创建了这个线性回归模型。但是,我没有得到好的结果,我的模型试图将点拟合在一条直线周围。我相信围绕“n”多项式的拟合点可以给出更好的结果。我已经用谷歌搜索了如何使用 Tensorflow Keras 将我的模型更改为多项式线性回归,但找不到好的资源。关于如何改进预测的任何建议?
我有一个大型数据集。首先将其洗牌,然后对 80% 的训练和 20% 的测试表示不满。数据集也被标准化。
1) 建筑模型:
def build_model():
model = keras.Sequential()
model.add(keras.layers.Dense(units=300, input_dim=32))
model.add(keras.layers.Activation('sigmoid'))
model.add(keras.layers.Dense(units=250))
model.add(keras.layers.Activation('tanh'))
model.add(keras.layers.Dense(units=200))
model.add(keras.layers.Activation('tanh'))
model.add(keras.layers.Dense(units=150))
model.add(keras.layers.Activation('tanh'))
model.add(keras.layers.Dense(units=100))
model.add(keras.layers.Activation('tanh'))
model.add(keras.layers.Dense(units=50))
model.add(keras.layers.Activation('linear'))
model.add(keras.layers.Dense(units=1))
#sigmoid tanh softmax relu
optimizer = tf.train.RMSPropOptimizer(0.001,
decay=0.9,
momentum=0.0,
epsilon=1e-10,
use_locking=False,
centered=False,
name='RMSProp')
#optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.1)
model.compile(loss='mse',
optimizer=optimizer,
metrics=['mae'])
return model
model = build_model()
model.summary()
2) 训练模型:
class PrintDot(keras.callbacks.Callback):
def on_epoch_end(self, epoch, logs):
if epoch % 100 == 0: print('')
print('.', end='')
EPOCHS = 500
# Store training stats
history = model.fit(train_data, train_labels, epochs=EPOCHS,
validation_split=0.2, verbose=1,
callbacks=[PrintDot()])
3) 绘制 Train loss 和 val loss enter image description here
4) 当结果没有得到改善时停止 enter image description here
5) 评估结果
[loss, mae] = model.evaluate(test_data, test_labels, verbose=0)
#Testing set Mean Abs Error: 1.9020842795676374
6) 预测:
test_predictions = model.predict(test_data).flatten()
7) 预测误差: enter image description here
【问题讨论】:
-
This Q&A(与 cmets)可以给你一些见解。
标签: tensorflow machine-learning keras linear-regression prediction