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

 
Юрий, я смог обучить vmr модель, но не могу предсказать на ней новые данные, подскажите пожалуйста что не так? Я выбираю меню Load model, выбираю там файл train.vmr из атачмента, потом нажимаю Use model. Вижу текст "Enter data and press "OK" в логе. Но на этом всё, какие данные я бы не вводил, я всё равно вижу серую неактивную кнопку Ok, получить ответ не получается. Файлы train.csv и test.csv тоже в атаче, это те что вы ранее выкладывали.
Файлы:
train.zip  38 kb
 
Dr.Trader:
Юрий, я смог обучить vmr модель, но не могу предсказать на ней новые данные, подскажите пожалуйста что не так? Я выбираю меню Load model, выбираю там файл train.vmr из атачмента, потом нажимаю Use model. Вижу текст "Enter data and press "OK" в логе. Но на этом всё, какие данные я бы не вводил, я всё равно вижу серую неактивную кнопку Ok, получить ответ не получается. Файлы train.csv и test.csv тоже в атаче, это те что вы ранее выкладывали.

Наверное ввели что-то нечисловое? От этого срабатывает обработчик исключительных ситуаций и дезактивирует кнопку OK. В таком случае нужно заново перезапускать jPrediction.

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

P/S Уже исправил.

Например, введём вместо числа символ "z". В результате получим сообщение об ошибке:

Чтобы теперь активировать кнопку OK нужно выбрать пункт меню File>Use model:


Исправленную версию загрузил на свой сайт

 

Разобрался, ошибка была в неправильном формате данных. Отформатировал данные всё как у вас в pdf - добавил вторую строку с пояснением, первую колонку с индексами, и стёр название колонки у предиктора. Всё заработало. Модель обучается в обоих случаях, и на оригинальных данных, и на отформатированных. Но предсказание работает только если для обучения подавать специально отформатированные данные.

Но к сожалению ваша модель не прошла испытание на ваших же данных. Вы ранее выкладывали файлы train.csv и test.csv, и у вас были неплохие показатели предсказывания. Я проверил, ошибка предсказания 50%, никаких хороших показателей нету и в помине.

Шаги для теста:

1) файл train.csv отформатировать как написано выше. Далее физически поделить файл на два - train_part1.csv и train_part2.csv. Второй файл содержит последних 20 строк из train.csv. Первый файл - всё остальное кроме последних 20 строк, дабы данные в двух файлах не пересекались.

2) обучить модель на train_part1.csv, перейти в режим прогнозирования. Подавать поочерёдно строки из train_part2.csv для прогноза. У меня правильный ответ получился только в 9 случаев из 20, чуда не произошло.

 

Я не понимаю почему если ваша модель сама делит исходный тренировочный файл на две части для тренировки и валидации, затем делает out of sample тест, и в итоге получает точность предсказания 100?  А если тренировочный файл физически разделить, и делать out of sample тест вручную, то предсказание не лучше чем подбрасывая монетку? Если для прогноза подавать любые примеры из тренировочноый выборки то прогноз работает правильно, то есть функция прогноза вроде в порядке. Это всё очень плохо и неправильно, у вас какие-то серьёзные ошибки в коде.

Файлы:
vmr_test.zip  44 kb
 
СанСаныч Фоменко:

Только очень поверхностное знакомство с R позволит говорить о "клячах".

Конечно, ставим R и видим интерпретатор символьных строк. Если углубиться, то можно увидеть байт-код, но это никаких проблем интерпретатора в смысле эффективности не решает. Даже обсуждать нечего - кляча.

 

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

Или, например, матричные операции. Если учесть, что в R отсутствует понятие "скаляр", а все начинается с векторов и матричная арифметика является совершенно естественной для R, то вопрос использования соответствующей библиотеки, которая написана НЕ на R, является принципиальным. Используется Intel Math Kernel Library.

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

 

Так, что является "клячей" а что нет - большой вопрос.

 

ПС.

Ничего портировать в R не надо, а надо просто изучить матчасть.  В R есть все, что нужно и очень много чего сверх этого. 

Поддерживаю СанСаныча. Все что нужно для любой Вашей задумки уже есть в R/

Высокомерное замечание Решетова не удивительно. Это такая миропозиция.

Переубеждать не нужно. Это бессмысленно.

 
Dr.Trader:

Я не понимаю почему если ваша модель сама делит исходный тренировочный файл на две части для тренировки и валидации, затем делает out of sample тест, и в итоге получает точность предсказания 100?  А если тренировочный файл физически разделить, и делать out of sample тест вручную, то предсказание не лучше чем подбрасывая монетку? Если для прогноза подавать любые примеры из тренировочноый выборки то прогноз работает правильно, то есть функция прогноза вроде в порядке. Это всё очень плохо и неправильно, у вас какие-то серьёзные ошибки в коде.

Вы правы, в коде обнаружена ошибка. Буду исправлять.
 
Vladimir Perervenko:

Поддерживаю СанСаныча. Все что нужно для любой Вашей задумки уже есть в R/

Тут уже я поспорю, если позволите, кляча имелось ввиду в плане скорости и я абсолютно согласен с Юрием...

Да скорей всего вы для R найдете готовое решение практически любой задачи но иногда упираетесь тупо в скорость

 

помню я делал очень жесткий перебор по многим параметрам через функцию корреляции, сначала использовал штатную функцию встроенную в R (она кстати написана на с++) но из за того что она перегружена разными методами расчет одного круга моего цикла занимал около 3.9 мин или 230 секунд, это время было не приемлемо, вторым шагом было написание собственной функции на R без всего лишнего , моя функция уже работала  со скоростью 30 секунд, но это меня тоже абсолютно не устраивало, поскольку R мой первый и единственный язык я попросил знакомого написать для меня фун. корреляции  на с++ и потом я ее встроил в R  , врем работы функции составило 0,33 сек.... итак сравним

штатная фун. корреляции в R  -  230 сек

самописная фун. кор в R      -   30 сек

функц. написана на с++    - 0,33 сек 

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

 
mytarmailS:

Тут уже я поспорю, если позволите, кляча имелось ввиду в плане скорости и я абсолютно согласен с Юрием...

Да скорей всего вы для R найдете готовое решение практически любой задачи но иногда упираетесь тупо в скорость

 

помню я делал очень жесткий перебор по многим параметрам через функцию корреляции, сначала использовал штатную функцию встроенную в R (она кстати написана на с++) но из за того что она перегружена разными методами расчет одного круга моего цикла занимал около 3.9 мин или 230 секунд, это время было не приемлемо, вторым шагом было написание собственной функции на R без всего лишнего , моя функция уже работала  со скоростью 30 секунд, но это меня тоже абсолютно не устраивало, поскольку R мой первый и единственный язык я попросил знакомого написать для меня фун. корреляции  на с++ и потом я ее встроил в R  , врем работы функции составило 0,33 сек.... итак сравним

штатная фун. корреляции в R  -  230 сек

самописная фун. кор в R      -   30 сек

функц. написана на с++    - 0,33 сек 

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

Ну так при чем здесь R?

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

Другое дело, что не все и не всё умеют  использовать их.

Но это не проблема языка.

Кстати удобство и простота встраивания функций на Срр просто поражает.

Удачи

 
mytarmailS:

Тут уже я поспорю, если позволите, кляча имелось ввиду в плане скорости и я абсолютно согласен с Юрием...

Да скорей всего вы для R найдете готовое решение практически любой задачи но иногда упираетесь тупо в скорость

 

помню я делал очень жесткий перебор по многим параметрам через функцию корреляции, сначала использовал штатную функцию встроенную в R (она кстати написана на с++) но из за того что она перегружена разными методами расчет одного круга моего цикла занимал около 3.9 мин или 230 секунд, это время было не приемлемо, вторым шагом было написание собственной функции на R без всего лишнего , моя функция уже работала  со скоростью 30 секунд, но это меня тоже абсолютно не устраивало, поскольку R мой первый и единственный язык я попросил знакомого написать для меня фун. корреляции  на с++ и потом я ее встроил в R  , врем работы функции составило 0,33 сек.... итак сравним

штатная фун. корреляции в R  -  230 сек

самописная фун. кор в R      -   30 сек

функц. написана на с++    - 0,33 сек 

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

Не будем подменять общие вопросы каким-то частным примером.

Если мы говорим вообще о эффективности кода в СИСТЕМЕ программирования R, то об основах эффективности я написал. В отличие от большинства систем программирования вычислительно емкие алгоритмы  в R используются косвенно причем используются вообще максимально эффективные  в области программирования,, внутри некоторых содержательных функций, хотя и существует возможность их использования напрямую, например оптимизации или ГА. 

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

Кроме того, о чем я не писал в своем посте про эффективность, - это то, о чем написали Вы. Это возможность написать срр кусок кода, при этом следует подчеркнуть, что структура R такова, что эта вставка будет является органичным дополнением к основным кодом.   И приведенный Вами пример является очень характерным для R.

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

Здравствуйте!

Нашел пакет с рекурентной нейросетью https://cran.r-project.org/web/packages/rnn/rnn.pdf, стало интересно проверить на своих данных(может и еще кому то будет интересно проверить ;)  )  но столкнулся с тем с чем еще никогда не сталкивался, поскольку сеть рекурентная то и данные в нее подаются спецефическим образом в виде 3D массива , несмотря на то что есть пример я все равно не могу понять как это работает

как должен выглядеть код в переменной  "Х"  если у меня не 2 предиктора а 100, вот кусок из примера:

# create training numbers
X1 = sample(0:127, 7000, replace=TRUE)
X2 = sample(0:127, 7000, replace=TRUE)
# create training response numbers
Y <- X1 + X2
# convert to binary
X1 <- int2bin(X1)
X2 <- int2bin(X2)
Y <- int2bin(Y)
# Create 3d array: dim 1: samples; dim 2: time; dim 3: variables.
X <- array( c(X1,X2), dim=c(dim(X1),2) )
Причина обращения: