Слои для прогнозирования финансовых данных с помощью Tensorflow / tflearn

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

Например, обучающие данные, такие как X, содержат факторы, а y - процентная ставка, которую я хочу обучать и прогнозировать.

     factor1      factor2     factor3          factor176  factor177    factor178
X= [[ 2.1428      6.1557      5.4101     ...,  5.86        6.0735      6.191 ]
    [ 2.168       6.1533      5.2315     ...,  5.8185      6.0591      6.189 ]
    [ 2.125       4.7965      3.9443     ...,  5.7845      5.9873      6.1283]...]

y= [[ 3.5593]
    [ 3.014 ]
    [ 2.7125]...]

Итак, я хочу использовать tensorflow / tflearn для обучения этой модели, но я действительно не знаю, какой именно метод мне выбрать для выполнения регрессии. Я пробовал LinearRegression от tflearn раньше, но результат не так хорош.

На данный момент я просто использую код, который нашел в Интернете.

net = tflearn.input_data([None, 178])
net = tflearn.fully_connected(net, 64, activation='linear',
                                weight_decay=0.0005)
net = tflearn.fully_connected(net, 1, activation='linear')
net = tflearn.regression(net, optimizer=
tflearn.optimizers.AdaGrad(learning_rate=0.01, initial_accumulator_value=0.01), 
loss='mean_square', learning_rate=0.05)
model = tflearn.DNN(net, tensorboard_verbose=0, checkpoint_path='tmp/')
model.fit(X, y, show_metric=True,
            batch_size=1, n_epoch=100)

Результатом является точность примерно 50% при диапазоне ошибок ± 10%. Пытался увеличить окно до 7 дней, но результат все равно плохой. Итак, я хочу знать, какой дополнительный слой я могу использовать, чтобы улучшить эту сеть.


person user6456568    schedule 11.11.2017    source источник


Ответы (1)


Во-первых, в этой сети нет смысла. Если скрытые блоки не активированы, ваша сеть эквивалентна линейной регрессии.

Так что прежде всего измени

net = tflearn.fully_connected(net, 64, activation='linear',
                                weight_decay=0.0005)

to

net = tflearn.fully_connected(net, 64, activation='relu',
                                weight_decay=0.0005)

Еще одна общая задача - всегда нормализовать данные. Ваши X большие, Y тоже большие - убедитесь, что они не большие, например, отбелив их (сделав их 0 средними и 1 стандартными).

Найти подходящую архитектуру - сложная задача, и вы не найдете для этого никаких «волшебных рецептов». Начните с понимания того, что вы делаете. Зарегистрируйте свое обучение, посмотрите, сходятся ли потери в обучении к небольшим значениям, если нет - вы либо недостаточно долго тренируетесь, либо сеть слишком мала, либо гиперпараметры обучения отключены (например, слишком большое правильное обучение, слишком высокая регуляризация и т. Д.)

person lejlot    schedule 11.11.2017
comment
Моя текущая версия: код и набор данных Я пробовал relu, но результат тестовых данных кажется странным. Вывод: вывод - person user6456568; 11.11.2017
comment
как сказано в ответе - линейная активация - это ошибка, но для того, чтобы все работало, нужно действительно понимать данные и модель; линейная вещь - единственная реальная ошибка, все остальное - это вопрос пошагового анализа и поиска, где что-то идет не так - и снова - изучение обучения имеет решающее значение, а не тестирование на данном этапе - person lejlot; 11.11.2017
comment
Я имею в виду, что если я изменю все 'linear' на 'relu', результат y останется в основном таким же, и я действительно запутался, потому что я использую те же данные, используя linear для прогнозирования индекса акций, точность довольно хорошая, я не понять, почему процентная ставка такая разная. - person user6456568; 11.11.2017
comment
вы не должны изменять все linear, только то, что указано в ответе. - person lejlot; 12.11.2017