Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 1884

 
Rorschach:

В итоге на практике так, это сегодняшний евро на M2, что то нейросеть начинает понимать, но пока слабо.
Синий - прогноз вверх, желтый - вниз.


 
Evgeny Dyuka:

Сразу видно что человек в реальном процессе ))

По началу стандарно отрисовывал используя

но толку мало, из-за большого шума уже после 10 эпох график ложится на горизонтальную.
У меня бинарная классификая и я анализирую степень уверенности сети в каждом ответе, т.е. например правильный ответ 0 1, а сеть выдает 0.4 0.6 - это хорший ответ, а чаще так: правильный ответ 0 1, а сеть выдает 0.49 0.51
Когда ответов тысячи их можно раскидать по группам по степени уверенности и проводить анализ.

 

Графики loss можешь выложить? Кроме эпох размер батча надо менять, чем больше эпох и меньше размер батча, тем больше раз измененяются веса. Еще есть смысл lerning_rate в оптимизаторе +- на порядок поменять. А оптимизатор какой используешь?

 
Rorschach:

Графики можешь выложить? Кроме эпох размер батча надо менять, чем больше эпох и меньше размер батча, тем больше раз измененяются веса. Еще есть смысл lerning_rate в оптимизаторе +- на порядок поменять. А оптимизатор какой используешь?

Для графика надо запустить обучалку, потом... но ничего интересного - вертикально вниз потом горизонтально, никакого плавного снижения как в учебниках ))
Бач 128, если мы об одном и том же говорим. Он всегда должен быть 128 это что то связано с TPU, такое требование.
Эпохи тоже перестал менять, после 150 обычно ничего не меняется.
Оптимизатор adam, c SGD чето не получается.
 
Rorschach:

Вот моя сетка, я тут динамически меняю количество слоев

def make_model(arr_size, lays):
  sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)

  #res = 2 # количество ответов
  act = "softmax"
  #act = "sigmoid"
  #opt = sgd
  opt = 'adam'

  model = Sequential()

  if lays == 1:
    model.add(Dense(int((arr_size-res)*k), input_dim=(arr_size-res), activation='relu'))
    model.add(Dropout(dropout))

  if lays == 2:
    model.add(Dense(int((arr_size-res)*k), input_dim=(arr_size-res), activation='relu'))
    model.add(Dropout(dropout))
    model.add(Dense(int((arr_size-res)*0.5*k), activation='relu'))
    model.add(Dropout(dropout))

  if lays == 3:
    model.add(Dense(int((arr_size-res)*k), input_dim=(arr_size-res), activation='relu'))
    model.add(Dropout(dropout))
    model.add(Dense(int((arr_size-res)*0.5*k), activation='relu'))
    model.add(Dropout(dropout))
    model.add(Dense(int((arr_size-res)*0.3*k), activation='relu'))
    model.add(Dropout(dropout))

  if lays == 4:
    model.add(Dense(int((arr_size-res)*k), input_dim=(arr_size-res), activation='relu'))
    model.add(Dropout(dropout))
    model.add(Dense(int((arr_size-res)*0.7*k), activation='relu'))
    model.add(Dropout(dropout))
    model.add(Dense(int((arr_size-res)*0.5*k), activation='relu'))
    model.add(Dropout(dropout))
    model.add(Dense(int((arr_size-res)*0.3*k), activation='relu'))
    model.add(Dropout(dropout))

  #model.add(Dense(int((arr_size-res)*0.1*k), activation='relu'))
  #model.add(Dropout(dropout))

  model.add(Dense(res, activation=act))

  if res==1:
    ls="binary_crossentropy"
  else:
    ls="categorical_crossentropy"
  model.compile(loss=ls, optimizer=opt, metrics=['accuracy'])
  return model
 
Evgeny Dyuka:

Вот моя сетка, я тут динамически меняю количество слоев

Можно попробовать вместо Dropout еще что-нибудь, уменьшить число нейронов. Добавить инициализацию и нормализацию весов. Входные данные как-нибудь обрабатываются? У меня результат стал лучше после умножения входных данных на порядок, похоже нужно все таки избавляться от нестационарности.

 
Rorschach:

Можно попробовать вместо Dropout еще что-нибудь, уменьшить число нейронов. Добавить инициализацию и нормализацию весов. Входные данные как-нибудь обрабатываются? У меня результат стал лучше после умножения входных данных на порядок, похоже нужно все таки избавляться от нестационарности.

Ни какой пакет не даст точный результат. Любая НС может выдавать только вероятностный прогноз вверх, вниз или неизвестно. Цена не подчиняется нейросетям и может легко идти против них. Вариант в 65% уже приемлем.

 
Uladzimir Izerski:

Ни какой пакет не даст точный результат. Любая НС может выдавать только вероятностный прогноз вверх, вниз или неизвестно. Цена не подчиняется нейросетям и может легко идти против них. Вариант в 65% уже приемлем.

здесь 56%. Синяя как должно быть, красная ответ сети. Проценты ничего не значат.

здесь 48%, цифра еще меньше, но хоть какие то телодвижения присутствуют.


 
Rorschach:

Можно попробовать вместо Dropout еще что-нибудь, уменьшить число нейронов. Добавить инициализацию и нормализацию весов. Входные данные как-нибудь обрабатываются? У меня результат стал лучше после умножения входных данных на порядок, похоже нужно все таки избавляться от нестационарности.

Да, надо все перебирать,  иначе никак.
Попробуй поиграть в это, хорошо прокачивает понимание как параметры влияют на результат.
Tensorflow — Neural Network Playground
Tensorflow — Neural Network Playground
  • Daniel Smilkov and Shan Carter
  • playground.tensorflow.org
It’s a technique for building a computer program that learns from data. It is based very loosely on how we think the human brain works. First, a collection of software “neurons” are created and connected together, allowing them to send messages to each other. Next, the network is asked to solve a problem, which it attempts to do over and over...
 
Evgeny Dyuka:
Да, надо все перебирать,  иначе никак.
Попробуй поиграть в это, хорошо прокачивает понимание как параметры влияют на результат.

Ага видел, плохо что свое нельзя подсунуть.

Попробуй lerning_rate уменьшить для начала.


Красивая картинка, четко видно где пошло переобучение


 
Maxim Dmitrievsky:

Торговля твоих кластеров, все как я и говорил 

и ето при том что ошибка на новых данных  0.82%

Так что надо было слушать меня когда я говорил  - делай торговалку и смотри сразу, а ты какие то оптимизаторы, парсеры и прочее г-но пилил

Причина обращения: