Подход кривой полиномиальной линейной регрессии Tensorflow - PullRequest
0 голосов
/ 25 февраля 2019

Я создал эту модель линейной регрессии, используя 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) участок Потеря поезда и потеря Val * введите описание изображения здесь

4) Стоп Когда результаты не улучшаются введите описание изображения здесь

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) Ошибка прогноза: введите описание изображения здесь

1 Ответ

0 голосов
/ 26 февраля 2019

Полиномиальная регрессия - это линейная регрессия с некоторыми дополнительными дополнительными входными функциями, которые являются полиномиальными функциями исходных входных объектов.то есть;пусть исходные входные функции: 1 , х 2 , х 3 , ...)

Создать набор полиномиальных функций, добавив некоторые преобразования исходных объектов, например: (x 1 2 , x 2 3 , х 1 3 х 2 , ...) .Можно решить, какие все функции должны быть включены, в зависимости от их ограничений, таких как интуиция по корреляции с целевыми значениями, вычислительными ресурсами и временем обучения.

Добавьте эти новые функции к исходному вектору входных объектов.Теперь преобразованный вектор входных объектов имеет размер len (x 1 , x 2 , x 3 , ...) + len (x 1 2 , х 2 3 , х 1 3 х 2 , ...)

Кроме того, этот обновленный набор функций ввода (x 1 , x 2 , x 3 , х 1 2 , х 2 3 , х 1 3 x 2 , ...) вводится в модель нормальной линейной регрессии.Архитектура ANN может быть снова настроена, чтобы получить лучшую обученную модель.

PS: Я вижу, что ваша сеть огромна, а количество входов всего 32 - это не обычная шкала архитектуры.Даже в этой конкретной линейной модели сокращение скрытых слоев до одного или двух скрытых слоев может помочь в обучении лучшим моделям (это предположение с предположением, что этот конкретный набор данных аналогичен другим обычно наблюдаемым наборам регрессионных данных)

...