在非常嘈杂的数据上使用Python Tensorflow进行机器学习回归

时间:2019-01-30 13:17:01

标签: python tensorflow machine-learning neural-network

我正在尝试寻找一个银河形状拟合软件的乘法偏差。为此,我们从已知数据中模拟一些图像,然后将软件应用于图像并查看它们对数据的预测程度。为了找到偏差函数,我试图使用机器学习回归算法。想法是将真实数据,软件预测的数据以及一些其他参数(例如星系大小)馈送到神经网络,以便随后可以预测错误。问题是这不起作用。

这是我将数据分为训练和测试的方式(df是我正在使用的数据框):

train_data, test_data, train_target, test_target = model_selection.train_test_split(
df.drop(columns=['g']), df.g, test_size=0.3, random_state=0)  #Splitting into training and testing data

我现在建立神经网络:

def build_model():
nlayers = 1
# Initialising the ANN
model = keras.Sequential()

# Adding the input layer and the first hidden layer
model.add(keras.layers.Dense(16, activation=tf.nn.relu ,input_shape=(train_data.shape[1],)))

# Adding the hidden layers (found N = len(train_data)/(neurons*10))
for i in range(nlayers):
    model.add(keras.layers.Dense(units = 16,activation=tf.nn.relu))

# Adding the output layer
model.add(keras.layers.Dense(units = 16,activation = "linear"))
model.add(keras.layers.Dense(units = 1))
opti = keras.optimizers.Nadam(0.0001)
model.compile(optimizer = opti, loss = 'mean_squared_error', metrics=['mse'])

return model

然后我训练它:

EPOCHS = 20
early_stop = keras.callbacks.EarlyStopping(monitor='val_loss', patience=20)

history = model.fit(train_data, train_target, epochs=EPOCHS, validation_split=0.2, verbose=1, callbacks=[early_stop])

Here you can see how the loss function decreases

但是,当我要求它预测值时,会发生以下情况:

test_predictions = model.predict(test_data).flatten()
plt.scatter(test_target[:1000], test_predictions[:1000])
plt.title("Is it working??")
plt.xlabel('True Values')
plt.ylabel('Predictions')
plt.axis('equal')
plt.xlim(plt.xlim())
plt.ylim(plt.ylim())
_ = plt.plot([-100, 100], [-100, 100])
plt.savefig("Predictions.png")
plt.show()

Predictions vs true values. Line is y = x equation, if it was working I would expect values to be around y=x

我对神经网络没有太多经验,所以我不知道我做错了什么,仅仅是数据还是我应该使用我不知道的某些功能。

>

感谢您的帮助!

0 个答案:

没有答案