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

mytarmailS #:

В сверточной нейронке ядра свертки "придумывает" нейронка в процессе обучения и ядер/фильтров там тысячи..

Подбирает коэффициенты разным строкам? Чем создаст вместо прямоугольной ф-ии какую-то более подходящую.

Forester #:

Подбирает коэффициенты разным строкам? 

нет, подбирает ядра свертки

Forester #:

 Чем создаст вместо прямоугольной ф-ии какую-то более подходящую.

да

[Удален]
Forester #:
По сверткам...
Если вторая функция для нее прямоугольная, то получится SMA


Если там другие формы этой функции (треугольные, экспоненциальные и др.) то получим что-то еще (может и EMA), просто будут другие коэффициенты для разных строк.
Но в любом случае как и с SMA и с EMA будет задержка из за усреднения.
Так что видимо и правда от них мало пользы, как и от МАшек. Один плюс - уменьшение числа предикторов.

ну там коэффициенты ядра свертки подбираются для минимизации ошибки, насколько помню

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

потом выходы передаются в следующий слой НС, в данном случае lstm, как на картинке

lstm пытается потом запомнить последовательности этих значений, типа аналог памяти

То есть особенность сверточного слоя - что он может выделить наиболее важные элементы из всей матрицы, а lstm запоминает их последовательности.


В итоге выделение важных признаков каждого ряда + запоминание их последовательностей, что за чем идет, в каком порядке. Аппроксимация. Обычно в конце еще полносвязный слой ставят с софтмаксом, чтобы разнести все это добро по классам.

lstm работает с радикально разбалансированными классами - для 2 классов в десятки раз?
[Удален]
СанСаныч Фоменко #:
lstm работает с радикально разбалансированными классами - для 2 классов в десятки раз?

lstm работает в принципе херово ) очень сложно правильно обучить

там постоянные взрывы градиента из-за множественных перемножений весов

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

Трансформер - это некая комбинация свертки и lstm, неофициально наверное можно провести такую аналогию

Это вам не случайные леса - там чтобы обучить нормально, надо выпендриться.

Сделал немного визуализации, для лучшего понимания процесса ухудшения результатов модели.

Ниже представлен график, на котором ZZ по балансу взвешенных ошибки квантового отрезка на выборке train.


Видно, что в целом тенденция хорошая, положительное смещение вероятности, а что же на двух следующих выборках - test и exam?

Ниже графики на этих выборках.

Наблюдаем флэт и к конце периода тренд на положительное смещение вероятности. Скорей всего модель, с участием этого квантового отрезка остановим - не дождавшись подъёма.

А что ждёт дальше?

На выборке exam, подъём продолжился в начале, но опять всё свалилось во флэт. Как же так получается, что на train был длительный тренд, а в последствии видим эпизодические всплески - нечто изменилось? Остаётся только гадать - или делать дополнительный сплит по другому квантовому отрезку, но как его сделать на train. ведь там уже не плохо всё - загадка.

Но, бывает, что удаётся найти и вполне сносные варианты, вот к примеру - сразу три выборки ниже.

Мысли, идеи, соображения - приветствуются!

Aleksey Vyazmikin #:
Мысли, идеи, соображения - приветствуются!

Если train переобучен, значит меньше обучать.

[Удален]

Есть, в общем-то, простая до гениальности вещь, которая позволяет определить, будет ли ваше МО работать на новых данных.

Для этого достаточно иметь только набор меток :) Потому что они являются бинаризованным представлением исходного ряда.

def calculate_entropy(series):
  """
  Calculates the entropy of a binary series using Shannon's formula.

  Args:
      series: A list of binary values (0s and 1s).

  Returns:
      The entropy of the series (float value).
  """
  counts = {0: 0, 1: 0}
  for bit in series:
    counts[bit] += 1
  total_length = len(series)
  probabilities = {key: value / total_length for key, value in counts.items()}
  entropy = 0
  for p in probabilities.values():
    if p > 0:  # Avoid log2(0) which is undefined
      entropy += -p * math.log2(p)
  return entropy
Forester #:

Если train переобучен, значит меньше обучать.

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

Я же написал про квантовый отрезок - фактически диапазон любого предиктора - другого тут нет. Берём диапазон, берём все нули и единицы из выборки - взвешиваем их для сбалансированности и строим баланс - если метка "1", то +1, если "0", то -1*К_Балансировки.

Фактически это график изменения смещения вероятности в динамике - по хронологии выборки.