Регресс машинного обучения с использованием Python Tensorflow на очень шумных данных - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь найти мультипликативный уклон программного обеспечения для подгонки формы галактики.Для этого мы моделируем некоторые изображения из известных данных, затем применяем программное обеспечение к изображениям и видим, насколько хорошо они предсказывают данные.Чтобы найти функцию смещения, я пытаюсь использовать алгоритм регрессии машинного обучения.Идея состоит в том, чтобы подавать действительные данные, данные, предсказанные программным обеспечением, и некоторые дополнительные параметры (например, размер галактики) в нейронную сеть, чтобы затем она могла предсказывать ошибки.Проблема в том, что это не работает.

Вот как я делю данные на обучение и тестирование (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])

Здесь вы можете увидеть, как уменьшается функция потерь

Однако, когда я прошу ее предсказать значения, происходит следующее:

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()

Прогнозы против истинных значений.Линия - это уравнение y = x, если бы оно работало, я ожидал бы, что значения будут около y = x

У меня нет большого опыта работы с нейронными сетями, поэтому я не знаю, если яделать что-то не так, если это просто данные, или если я должен использовать некоторые функции, о которых я не знаю.

Любая помощь приветствуется !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...