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

 
Aleksey Terentev:
Мои решения сначала основывались на OpenNN (C++).
Теперь же набив шишек я перешел на замечательный проект Keras (Python).

В основном я занимаюсь глубоким обучением прогнозирования проблем классификации.

Значит мы занимаемся одной областью МО. Keras  хороший пакет, тем более, что он портирован на R.

Только я не понял вопрос в чем?

Удачи

 
Vladimir Perervenko:

Значит мы занимаемся одной областью МО. Keras  хороший пакет, тем более, что он портирован на R.

Только я не понял вопрос в чем?

Удачи

Да просто решил как то влиться в обсуждение. =)
 
Maxim Dmitrievsky:


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

Единственный плюс это подбор весов в оптимизаторе одновременно с другими параметрами системы

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

Обновление.

Дополнительные эксперименты после изменения советника показали следующие результаты, в сравнении с обычным MLP 3-5-1.

Для проверок использовались разные формулы:

//double func(double d1,double d2,double d3 ){return d1*d2;}   //ошибка 0-2% , т.к. умножение заложено в формулы. 2% получается т.к. генетический оптимизатор не всегда останавливается не на идеальном решении. Но есть и абсолютно точное решение с ошибкой = 0.
//double func(double d1,double d2,double d3 ){return d1*d2*d3;}// ошибка 0-2%  умножение заложено в формулы, на MLP 1%
//double func(double d1,double d2,double d3 ){return MathSin(d1);}// ошибка 2-6%, на MLP 0,1%
//double func(double d1,double d2,double d3 ){return MathSin(d1)*MathSin(d2)*MathSin(d3);}// ошибка 2%, на MLP 1%
//double func(double d1,double d2,double d3 ){return MathSin(d1)*MathSin(d2)*MathSqrt(d3);}// ошибка 3-4%, на MLP 1%
//double func(double d1,double d2,double d3 ){return MathSin(d1)*MathPow(d2,.33)*MathSqrt(d3);}// ошибка 8-4%, на MLP 1.5%
//double func(double d1,double d2,double d3 ){return MathPow(d1,2)*MathPow(d2,.33)*MathSqrt(d3);}// ошибка 8-4%, на MLP 1.5%

В итоге можно сделать вывод, что обычный MLP имеет ошибку в 2-3 раза меньше, чем RNN Решетова. Возможно, часть этой ошибки возникает из за того, что генетический оптимизатор терминала МТ5 останавливается не на идеальном решении.
 
elibrarius:

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

Обновление.

Дополнительные эксперименты после изменения советника показали следующие результаты, в сравнении с обычным MLP 3-5-1.

Для проверок использовались разные формулы:

//double func(double d1,double d2,double d3 ){return d1*d2;}   //ошибка 0-2% , т.к. умножение заложено в формулы. 2% получается т.к. генетический оптимизатор не всегда останавливается не на идеальном решении. Но есть и абсолютно точное решение с ошибкой = 0.
//double func(double d1,double d2,double d3 ){return d1*d2*d3;}// ошибка 0-2%  умножение заложено в формулы, на MLP 1%
//double func(double d1,double d2,double d3 ){return MathSin(d1);}// ошибка 2-6%, на MLP 0,1%
//double func(double d1,double d2,double d3 ){return MathSin(d1)*MathSin(d2)*MathSin(d3);}// ошибка 2%, на MLP 1%
//double func(double d1,double d2,double d3 ){return MathSin(d1)*MathSin(d2)*MathSqrt(d3);}// ошибка 3-4%, на MLP 1%
//double func(double d1,double d2,double d3 ){return MathSin(d1)*MathPow(d2,.33)*MathSqrt(d3);}// ошибка 8-4%, на MLP 1.5%
//double func(double d1,double d2,double d3 ){return MathPow(d1,2)*MathPow(d2,.33)*MathSqrt(d3);}// ошибка 8-4%, на MLP 1.5%

В итоге можно сделать вывод, что обычный MLP имеет ошибку в 2-3 раза меньше, чем RNN Решетова. Возможно, часть этой ошибки возникает из за того, что генетический оптимизатор терминала МТ5 останавливается не на идеальном решении.

Да, интересные результаты, возможно полным перебором было бы поточнее
 
Maxim Dmitrievsky:

Да, интересные результаты, возможно полным перебором было бы поточнее
было бы, но через несколько недель или месяцев... 8 подбираемых коэффициентов с шагом в 1% 1008= 10000000000000000 итераций, да и терминал сам переключается на генетику, при таком количестве.
 
elibrarius:
было бы, но через несколько недель или месяцев... 8 подбираемых коэффициентов с шагом в 1% 1008= 10000000000000000 итераций, да и терминал сам переключается на генетику, при таком количестве.

Подскажите, классифицирующий МЛП из алглиб я так понял требует как минимум 2 выхода, как с этим работать? нигде ни справки, ни описания.. жесть )
 
Maxim Dmitrievsky:

Подскажите, классифицирующий МЛП из алглиб я так понял требует как минимум 2 выхода, как с этим работать? нигде ни справки, ни описания.. жесть )

Да 2, из справки http://alglib.sources.ru/dataanalysis/neuralnetworks.php

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

С ним еще не занимался, пока с линейным экспериментирую.
 
elibrarius:

Да, из справки http://alglib.sources.ru/dataanalysis/neuralnetworks.php

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


А, ну то есть мы подаем вероятность того или иного исхода, например вероятность на покупку 0.9, тогда на продажу 0.1, один массив будет служить буфером для вероятностей на покупку, другой на продажу, заполняем их этими значениями, и после обучения в них и будет скидывать по отдельности вероятности на покупку и на продажу, правильно понимаю?
 
Maxim Dmitrievsky:

А, ну то есть мы подаем вероятность того или иного исхода, например вероятность на покупку 0.9, тогда на продажу 0.1, один массив будет служить буфером для вероятностей на покупку, другой на продажу, и после обучения в них и будет скидывать по отдельности вероятности, правильно понимаю?

И того, что я читал, - у меня сложилось такое же мнение.

Хотя не знаю в чем его преимущество.. имея 1 выход, тоже получим вероятности - около 0 (или -1) Buy, а около 1 Sell. (Или наоборот, смотря как обучите).

Может он полезен, если 3 или больше выходов? Ведь 1 выход сложно будет использовать.... для 3 или 4 задач (хотя тоже можно использовать 0, 0.5 и 1 как классы Buy, ждем, Sell)

 
elibrarius:

И того, что я читал, - у меня сложилось такое же мнение.

Хотя не знаю в чем его преимущество.. имея 1 выход, тоже получим вероятности - около 0 (или -1) Buy, а около 1 Sell. (Или наоборот, смотря как обучите).

Может он полезен, если 3 или больше выходов? Тогда 1 выход сложно будет использовать.... для 3 или 4 задач (хотя тоже можно использовать 0, 0.5 и 1 как классы Buy, ждем, Sell)


ну да, наверное они так сделали что бы можно было больше 2-х классов иметь.. тога это уже больше кластеризация наверное будет и можно юзать другие методы типа k-means :)