Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 754
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Примеры нейронок я уже выкладывал сюда, поищу что-нибудь подходящее и переделаю под ваши данные (и с комитетом). Вводных лекций я не буду писать, но я в код побольше комментов добавлю.
Извини, не понимаю смысла переменной с(F,T) В цикле
То есть этот цикл идёт по чётным строкам таблицы, а как тогда сделать по нечётным???
F и T это сокращения для булевых значений FALSE и TRUE, в принципе неважно - писать c(T,F) или c(TRUE,FALSE), первый вариант просто короче.
Если в таблице 10 строк, то c(1:nrow(table)) это просто вектор c(1,2,3,4,5,6,7,8,9,10).
А массивы с булевыми значениями в этом случае будут зацикливаться до нужной длинны, получится c(TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE).
т.е. c(1:nrow(table))[c(F,T)] R поймёт как
c(1,2,3,4,5,6,7,8,9,10)[c(TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE)]
и возьмёт те элементы вектора, которым соответствует TRUE по порядку.
Например если хочется взять каждый третий элемент, то это можно записать как
c(1,2,3,4,5,6,7,8,9,10)[c(FALSE,FALSE,TRUE,FALSE,FALSE,TRUE,FALSE,FALSE,TRUE,FALSE)]
или сокращённо
c(1:10)[c(F,F,T)]
для нечётных элементов нужно просто поменять T и F местами: c(1:nrow(table))[c(T,F)]
F и T это сокращения для булевых значений FALSE и TRUE, в принципе неважно - писать c(T,F) или c(TRUE,FALSE), первый вариант просто короче.
Если в таблице 10 строк, то c(1:nrow(table)) это просто вектор c(1,2,3,4,5,6,7,8,9,10).
А массивы с булевыми значениями в этом случае будут зацикливаться до нужной длинны, получится c(TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE).
т.е. c(1:nrow(table))[c(F,T)] R поймёт как
c(1,2,3,4,5,6,7,8,9,10)[c(TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE)]
и возьмёт те элементы вектора, которым соответствует TRUE по порядку.
Например если хочется взять каждый третий элемент, то это можно записать как
c(1,2,3,4,5,6,7,8,9,10)[c(FALSE,FALSE,TRUE,FALSE,FALSE,TRUE,FALSE,FALSE,TRUE,FALSE)]
или сокращённо
c(1:10)[c(F,F,T)]
для нечётных элементов нужно просто поменять T и F местами: c(1:nrow(table))[c(T,F)]
Спасибо что не обламывает писать столь развёрнутые описания. Действительно многое становится понятным. Стыдно даже спрашивать, но решусь. Смысл задачи в следующем.....
Обучающий файл состоит из одинакого количества классов по таргету. Другими словами в таргете у меня 24 единички и 24 нуля. Повторюсь, хочу сделать как у Решетова.....
Я разбил обучающую таблицу на две таблици, где в одной все вектора, где таргет 1 в другой где таргет 0.
Беру таблицу с таргетом 1 и тут нужно создать две подтаблицs, где чётные стоки записать в Train1, а не чётные в Train2.
Сначала делаем для чётных
Но тогда таблица Train1 будет содержать строки c NA, а нужно чтоб Train1 была размером в 12 строк, ведь из 24 строк только 12 являются чётными. Чето голову сломал как это сделать....
Пожалуйста.
Для R нужно другое мышление, нужно мысленно оперировать векторами, тогда код писать совсем просто. Профессионалы в одну строку такое пишут что я даже не понимаю, и сам бы писал циклами в несколько строк.
Train1 <- rbind(Qwe[which(Qwe[,"target"]==1)[c(T,F)], ], Qwe[which(Qwe[,"target"]==0)[c(T,F)], ])
Train2 <- rbind(Qwe[which(Qwe[,"target"]==1)[c(F,T)], ], Qwe[which(Qwe[,"target"]==0)[c(F,T)], ])
пошагово -
which(Qwe[,"target"]==1) - номера строк с таргетом 1
which(Qwe[,"target"]==1)[c(T,F)] - номера строк с таргетом1, с пропуском через 1
Qwe[which(Qwe[,"target"]==1)[c(T,F)], ] - табличка полученная из Qwe, с таргетом 1 с пропуском через 1
rbind(... , ...) - объединение двух табличек (с таргетом 1 и с таргетом 0)
Пожалуйста.
Для R нужно другое мышление, нужно мысленно оперировать векторами, тогда код писать совсем просто. Профессионалы в одну строку такое пишут что я даже не понимаю, и сам бы писал циклами в несколько строк.
Train1 <- rbind(Qwe[which(Qwe[,"target"]==1)[c(T,F)], ], Qwe[which(Qwe[,"target"]==0)[c(T,F)], ])
Train2 <- rbind(Qwe[which(Qwe[,"target"]==1)[c(F,T)], ], Qwe[which(Qwe[,"target"]==0)[c(F,T)], ])
Ты просто монстритески шаришь. Две строки, такая гора с плечь. Ладно, продолжаю разбиратся... Спасибо!!!
К эти двум выборкам нужно добавить ещё две.
MLP1=Train1+Test(Train2)
MPL2=Train2+Test(Train1)
Если сложить Test(Train2)+Test(Train1), то мы получим результат на всём участке обучения и этот участок будет тестовым, для каждого из полинома.
Может выберешь время, если сейчас нет возможно. Но это пол часа и убедились. Просто я хочу сделать зеркало. Я возьму один и тот же файл и научу его двумя способами. Потом кинем это всё на Контрольный участок и всё станет видно. Что скажешь?
объединить таблички можно функцией 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.
Я в общем к тому что если что-то сделать как в модели Решетова, что-то дописать, потом взять обычную нейронку и как-то смешать с предыдущими шагами, и ждать что всё это заработает как у Решетова - это получится бесперспективный долгий процесс, на который я точно не подписываюсь.
Если хочется тот-же результат как у Решетова, но в R, то тогда нужно брать и переписывать весь джава код модели в R.
Зато есть много альтернатив. Если с ними получится ещё лучше чем у Решетова - то вообще отлично, больше ничего и не надо, всё готово.