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

 
Aleksey Vyazmikin #:

Пока не укладывается в голову. Хорошо это всё в одном пространстве же происходит - в метрике одного предиктора, а как учитывать остальные?

По поводу что делать при прогнозировании - я предполагал использовать две модели - одна детектит то, что отсеяли, или подтверждает, что данные в области "кучкавания", а другая уже работает на том, что осталось.

https://www.mql5.com/ru/articles/9138

уже год как никому нет дела

Подобных алгоритмов написал с десяток или двадцаток, некоторые хорошо себя зарекомендовали. В статье не самый лучший по стабильности результатов, первый блин комом.

поэтому пока нечего обсуждать, потому что пока нет ничего лучше


Метамодели в машинном обучении и трейдинге: Оригинальный тайминг торговых приказов
Метамодели в машинном обучении и трейдинге: Оригинальный тайминг торговых приказов
  • www.mql5.com
Метамодели в машинном обучении: Автоматическое создание торговых систем практически без участия человека — Модель сама принимает решение как торговать и когда торговать.
 
Я новичок в ML. Работаю над несколькими моделями. И в последнюю неделю появилась проблема. Ни одна модель не сохраняется в ONNX(((. Кто сталкивался? 
WARNING:tf2onnx.tf_loader:Could not search for non-variable resources. Concrete function internal representation may have changed.
ERROR:tf2onnx.tf_utils:pass1 convert failed for name: "model_3/lstm_4/PartitionedCall/while"
op: "StatelessWhile"
input: "model_3/lstm_4/PartitionedCall/while/loop_counter"
input: "model_3/lstm_4/PartitionedCall/while/maximum_iterations"
input: "model_3/lstm_4/PartitionedCall/time"
input: "model_3/lstm_4/PartitionedCall/TensorArrayV2_1"
input: "model_3/lstm_4/zeros"
input: "model_3/lstm_4/zeros_1"
input: "model_3/lstm_4/PartitionedCall/strided_slice"
input: "model_3/lstm_4/PartitionedCall/TensorArrayUnstack/TensorListFromTensor"
input: "Func/model_3/lstm_4/PartitionedCall/input/_3"
input: "Func/model_3/lstm_4/PartitionedCall/input/_4"
input: "Func/model_3/lstm_4/PartitionedCall/input/_5"
attr {
  key: "T"
  value {
    list {
      type: DT_INT32
      type: DT_INT32
      type: DT_INT32
      type: DT_VARIANT
      type: DT_FLOAT
      type: DT_FLOAT
      type: DT_INT32
      type: DT_VARIANT
      type: DT_FLOAT
      type: DT_FLOAT
      type: DT_FLOAT
    }
  }
}
attr {
  key: "_lower_using_switch_merge"
  value {
    b: false
  }
}
attr {
  key: "_num_original_outputs"
  value {
    i: 11
  }
}
attr {
  key: "_read_only_resource_inputs"
  value {
    list {
    }
  }
}
attr {
  key: "body"
  value {
    func {
      name: "while_body_149241"
    }
  }
}
attr {
  key: "cond"
  value {
    func {
      name: "while_cond_149240"
    }
  }
}
attr {
  key: "output_shapes"
  value {
    list {
      shape {
      }
      shape {
      }
      shape {
      }
      shape {
      }
      shape {
        dim {
          size: -1
        }
        dim {
          size: 128
        }
      }
      shape {
        dim {
          size: -1
        }
        dim {
          size: 128
        }
      }
      shape {
      }
      shape {
      }
      shape {
        dim {
          size: 1
        }
        dim {
          size: 512
        }
      }
      shape {
        dim {
          size: 128
        }
        dim {
          size: 512
        }
      }
      shape {
        dim {
          size: 512
        }
      }
    }
  }
}
attr {
  key: "parallel_iterations"
  value {
    i: 32
  }
}
, ex=Could not infer attribute `_read_only_resource_inputs` type from empty iterator
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-7-50ef5b7ad3f4> in <cell line: 87>()
     85 
     86 # Преобразовать Keras-модель в ONNX формат
---> 87 onnx_model = tf2onnx.convert.from_keras(model)
     88 
     89 # Сохранить модель в формате ONNX

8 frames
/usr/local/lib/python3.10/dist-packages/onnx/helper.py in make_attribute(key, value, doc_string, attr_type)
    874         value = list(value)
    875         if len(value) == 0 and attr_type is None:
--> 876             raise ValueError(
    877                 f"Could not infer attribute `{key}` type from empty iterator"
    878             )

ValueError: Could not infer attribute `_read_only_resource_inputs` type from empty iterator
 
Aleksey Vyazmikin #:

Пока не укладывается в голову. Хорошо это всё в одном пространстве же происходит - в метрике одного предиктора, а как учитывать остальные?

По поводу что делать при прогнозировании - я предполагал использовать две модели - одна детектит то, что отсеяли, или подтверждает, что данные в области "кучкавания", а другая уже работает на том, что осталось.

В примере 2 предиктора, т.е. изменяем расстояние в 2-х мерном пространстве (рассчитываем гипотенузу). Если будет 5000 признаков, значит будете измерять расстояние в 5000-мерном пространстве (как измерять - см код k-means в алглибе, там как раз это основная задача - измерять расстояния, возьмите его себе за основу).
Похоже, что корень из суммы квадратов катетов во всех пространствах https://wiki.loginom.ru/articles/euclid-distance.html

Если будете реально делать - не забудьте отнормировать предикторы, чтобы например объемы 1...100000, не проглотили в расчетах дельты цен 0,00001...0,01000.

Как это детектировать? Вот в чем вопрос. Особенно на рыночных данных, где не будет такого четкого разделения зашумленной области, как в примере. Зашумлено будет всё, процентов на 90-99.

Возможно проще воспользоваться готовыми пакетами по удалению шумных строк, может там и детектор есть...

 
Maxim Dmitrievsky #:

https://www.mql5.com/ru/articles/9138

уже год как никому нет дела

Подобных алгоритмов написал с десяток или двадцаток, некоторые хорошо себя зарекомендовали. В статье не самый лучший по стабильности результатов, первый блин комом.

поэтому пока нечего обсуждать, потому что пока нет ничего лучше


Ну, почему нет дела - думаю, что просто не распространён ещё питон среди трейдеров, что бы люди переходили в активное обсуждение.
Попробую попозже на своей выборке Ваш подход.

Пробовали метод из коробки от CatBoost?

 

sibirqk #:
Они синхронизированы. Я же написал в начале поста - 'выровнял их по датам', что как раз и означает синхронизацию пар по времени.

"Но к сожалению, имхо, опять полный рандом. На картинке кусок графиков для иллюстрации."

Вы правы, не все так просто

 
Forester #:

В примере 2 предиктора, т.е. изменяем расстояние в 2-х мерном пространстве (рассчитываем гипотенузу). Если будет 5000 признаков, значит будете измерять расстояние в 5000-мерном пространстве (как измерять - см код k-means в алглибе, там как раз это основная задача - измерять расстояния, возьмите его себе за основу).
Похоже, что корень из суммы квадратов катетов во всех пространствах https://wiki.loginom.ru/articles/euclid-distance.html

Теперь наклёвывается понимание - спасибо - буду думать.

Forester #:

Если будете реально делать - не забудьте отнормировать предикторы, чтобы например объемы 1...100000, не проглотили в расчетах дельты цен 0,00001...0,01000.

Верно, надо нормировать. Однако, а что если их отквантовать и метрику чисто по индексам считать? :) И чего то мне не нравится идея через катеты считать - искусственно как то оно.

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

Forester #:

Как это детектировать? Вот в чем вопрос. Особенно на рыночных данных, где не будет такого четкого разделения зашумленной области, как в примере. Зашумлено будет всё, процентов на 90-99.

Возможно проще воспользоваться готовыми пакетами по удалению шумных строк, может там и детектор есть...

Вообще, Вы смотрели видео? Там ближе к концу как раз говорится о том, что строится модель, которая как раз и детектит к какой области относятся данные, и если к некучкующимся, по данном выборки на которой проходило обучение, то игнорируется сигнал, как я понял. Понятно, что у нас данные намного хуже, чем там обсуждались, но если это будет 20%-30% целевых "1", то я уже буду рад.

Другой вариант - обучить модель детектировать эти исключённые примеры, сделав разметку по этим строкам в общей выборке.

 
Aleksey Vyazmikin #:

Верно, надо нормировать. Однако, а что если их отквантовать и метрику чисто по индексам считать? :) И чего то мне не нравится идея через катеты считать - искусственно как то оно.

Одна фича отквантовалась к 2х квантам другая к 32. Не пойдет.

Aleksey Vyazmikin #:

Вообще, Вы смотрели видео? Там ближе к концу как раз говорится о том, что строится модель, которая как раз и детектит к какой области относятся данные, и если к некучкующимся, по данном выборки на которой проходило обучение, то игнорируется сигнал, как я понял. Понятно, что у нас данные намного хуже, чем там обсуждались, но если это будет 20%-30% целевых "1", то я уже буду рад.

Другой вариант - обучить модель детектировать эти исключённые примеры, сделав разметку по этим строкам в общей выборке.

Не смотрел.
Детектировать исключенные примеры можно без всех этих расчетов. Уже говорил, - просто исключаете листья у которых вероятность одного из классов около 50%.

 
Forester #:

Одна фича отквантовалась к 2х квантам другая к 32. Не пойдет.

Да не, будет то ж самое относительное место - число разделителей(сплитов) - фиксированное для всех.

Forester #:

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

Методов может быть много разных. Мне интересен вариант обработки до построения модели - как мне кажется, он даёт меньше вариантов комбинаций построения, что снижает ошибку при конечном выводе - успешно прошло обучение окончательной модели или нет, в целом.
К тому же, если мы говорим о том, что можно чего либо "выкинуть", то надо упомянуть о каких моделях идёт речь. Если это лес, то считать процент листьев без "выбывших" или считать число активаций этих возле 50%, и при превышении их порога не реагировать на сигнал?
При бустинге там ещё веселей - неуверенные листья в сумме могут смещать вероятность в ту или иную сторону - всё хочу график построить, на котором видно будет как раздаются веса в зависимости от смещения вероятности, но всё откладываю. Три дня компьютер считает похожесть листьев модели - думаю об оптимизации алгоритма - слишком долго...

 
Forester #:
Если будет 5000 признаков
При такой большой размерности метрические алгоритмы типа KNN имеют мало смысла. Грубо говоря, вся выборка оказывается на почти одинаковом расстоянии от любой точки и результат будет определяться небольшими случайными отклонениями расстояний.
 
Aleksey Vyazmikin #:

Ну, почему нет дела - думаю, что просто не распространён ещё питон среди трейдеров, что бы люди переходили в активное обсуждение.
Попробую попозже на своей выборке Ваш подход.

Пробовали метод из коробки от CatBoost?

Что такое метод из коробки
Питон необязателен. Кидал кучу литературы.
Ну и еще вангую, что все, кто еще не начал, еще какое-то время покапризничают, а потом придут к этой теме :) может через 10 лет, может через 100

Просто как бы нет других вариантов, их просто нет. Могут быть варианты с другими нейросетями, но принцип тот же самый - разделяй и властвуй.
Причина обращения: