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

 
Dr. Trader:

объединить таблички можно функцией rbind()
MLP1 <- rbind(Train1, Test)

А что такое Test(Train2)? И зачем тренировочную и тестовую таблицу объединять? Тест должен быть отдельно, чтоб проверить на нём уже готовую обученную модель.

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


Ещё раз посмотри что я там написал - https://www.mql5.com/ru/forum/86386/page753#comment_6821981
просто подставь в тот код свои данные по описанию, и запусти. Если предикторы взяты все подряд и не отсеяны, то с первого раза всё выйдет наверное плохо. После выполнения кода ещё дополнительно выполни команду max(gaResult@fitness) это покажет R2 оценку лучшей модели найденной генетикой. Если оценка близка к 1 или чуть меньше - то хорошо, если близка к 0 или даже отрицательна - то плохо. 

Потом в PREDICTOR_COLUMNS укажи конкретные номера колонок которые ты определил как хорошие, и ещё раз запусти код, модель обучится только на этих предикторах. В идеале оценка лучшей модели найденной генетикой должно быть близка к 1, а точность на тренировочной и на тестовой табличке - 1.00 . 

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

Если с тем кодом ничего хорошего не получится (даже с KFOLDS=10) - значит не судьба. Если получится - значит есть хорошая альтернатива модели Решетова, и можно дальше разбираться с этим кодом и переносить модель в mql.

НА самом деле есть всего два участка Траин1 и Тест1

СетьА учится на Трейн1 и отбирается по Тест1

СетьБ учится на Тест1 и отбирается на Трайн1

Когда мы сложим два участка. Для СетиА Тест1, Для СетиБ Трайн1, то получим результаты обучения на протяжении всего участка обучения, но этот участок будет тестовым. Вот какой смысл заложен у Решетова. Не знаю, как предложил мне проверить ты..... kFold делит как то участками.... не понятно.....

 

Я не хочу повторить результат Решетова, я хочу организовать ИИ как у него. То как он тренирует комитет. Понятное дело что сама тренировка будет уже доступными средствами, Но организация, может играет Важную роль....

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

 

Понял, это почти тоже самое. У Решетова там строки берутся через одну (треним на чётных, тестим на нечётных), а в моём примере строки делятся группами подряд (тренировка на строках 1-100, тест на строках 101-200). Для форекса так лучше, хоть какая-то проверка на то что модель  может работать и в другом интервале времени, неизвестном ей.

Разбиение в стиле Решетова тоже можно сделать, тогда в функции elemnn_kfold сотри 

split2 <- function(x,n) split(x, cut(seq_along(x), n, labels = FALSE)) #функция которая поделит строки таблицы на число кусков согласно KFOLDS
folds <- split2(1:nrow(x), KFOLDS) #номера строк для обучения в каждом фолде

и вместо этого вставь

folds <- list()
folds[[1]] <- c(which(y==1)[c(T,F)], which(y==0)[c(T,F)])
folds[[2]] <- c(which(y==1)[c(F,T)], which(y==0)[c(F,T)])

и обязательно в начале кода поменяй число фолдов на 2 - KFOLDS=2, иначе какие-то ошибки полезут

 

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

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

 
Все верно, Контрольная выборка, которая может быть участок ООС. Обучили, протестировари. Кинули торговать. Я лично такого мнения......
 
Mihail Marchukajtes:
Все верно, Контрольная выборка, которая может быть участок ООС. Обучили, протестировари. Кинули торговать. Я лично такого мнения......

Но тут встаёт вопрос. Как выбрать модель без контрольного участка. Натренировали, получили результаты на кроссвалидации, сказали это именно та модель которая наберёт, поставили на реал!!!!!

Как правило контрольный участок я делаю в течении 1 дня, это 3-4 сигнала..... с учётом что ей работать недели две, не велика потеря......

 
Запустил Твой скрипт с указанными изменнениями. Ошибок не выдаёт, и даже что то там тренирует, НО никаких графиков не выводит в процессе обучения. Так или иначе я вижу результат ввиде ошибки. Буду переделывать свои модели, тогда и вернусь к этому скрипту. Как раз будут сформированы тренировочные наборы, там  и продолжим....
 

ТО: Dr. Trader.

Скрипт разбирать подробно не стал, очень уж "расхристанно" пишете. Ну это у каждого свой стиль. Но есть несколько важных замечаний. ELM имеет ряд особенностей в применении:

  • чем больше примеров подаете ELM при обучении, тем она менее чувствительна к шуму (из опыта не менее 2000)
  • в ансамбле нейросетей ELM их должно быть 100+ для вменяемого результата (из опыта лучше взять с запасом и потом отсеять)
  • применяемое Вами объединение простым голосование дает результат хуже чем усреднение. Хотя это на усмотрение разработчика
  • seet.seed не обеспечивает нужной повторяемости и разнообразия при оптимизации гиперпараметров. Посмотрите комментарий к статье. Там elibrarius проверял экспериментом эту идею. Только принудительная установка RNG в контролируемое состояние при каждой инициализации нейросети даст действительный результат при оптимизации. Как по мне лучше использовать Байесовскую оптимизацию. Дает хороший выбор гиперпараметров.
Удачи

 

Спасибо за комментарии, учту. 

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


Vladimir Perervenko:

применяемое Вами объединение простым голосование дает результат хуже чем усреднение. Хотя это на усмотрение разработчика

там на самом деле два способа предсказания ансамблем:

1) функция elemnn_kfold_predict() - считается среднее арифметическое для результатов регрессии каждой модели

2) функция elemnn_kfold_predict_reshetovstyle() - я это для Михаила добавил для его экспериментов, такой способ объединения результатов ансамбля используется в нейронке Решетова. Только классификация. Там сравниваются результаты всех моделей, и даётся ответ с конкретным классом только если все модели дали одинаковое предсказание. Если хоть одна модель дала предсказание не такое как у остальных - то фунция возвращает предсказание "не знаю".

 
Ну что результат уже есть? Где советник то?
Причина обращения: