Как правильно сформировать входные значения для НС. - страница 29

 
sergeev писал (а) >>

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

Сам я, после прочтения вумных книжок в месте где говориться про невозможность сделать "исключающее или" линейной сетью, воспринял это как невозможность применения линейных сетей для рынка (по той логичной причине, что рынок намного сложнее чем просто "исключающее или" :).

А может это не так? Может Юрий прав? И не надо лохматить купу книг по нелинейным, а просто побить все плоскостями?

Линейно-разделимую классификацию можно получить для ЛЮБОЙ задачи.

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

Как я уже писал выше -- если получены положительные результаты с линейным персептроном -- он нафек не нужен, правила уже найдены.

 
Ну, тогда вопрос по линейным/нелинейным считаю закрытым.
 

Шаблон сети. Работает в отдельном потоке (CWinThread). 

Версия еще не доделана как хотелось бы. Нет контроля прерывания потока.

Плохо реализована логика файловых операций.

Много неправлильных комментариев к коду.

15.07.08

Файлы:
better1.rar  50 kb
 
Сделал считывание из потока информации через таймер (чтоб не грузить лишние данные)
Прикуртил считывание информации с рабочего потока через указатели (для уменьшения числа копирований)
Сделал функцию построения графика среднеквадратичной ошибки (посмотреть как происходит "путешествие" сети по локальным минимумам)
Добавил кнопку остановки вычислений и скидывания текущих весов в файл.
Добавил нормальные коментарии

16.08.08
Файлы:
better1_1.rar  53 kb
_hilo_1.mq4  4 kb
_target_2.mq4  2 kb
 
sergeev писал (а) >>
Сделал считывание из потока информации через таймер (чтоб не грузить лишние данные)
Прикуртил считывание информации с рабочего потока через указатели (для уменьшения числа копирований)
Сделал функцию построения графика среднеквадратичной ошибки (посмотреть как происходит "путешествие" сети по локальным минимумам)
Добавил кнопку остановки вычислений и скидывания текущих весов в файл.
Добавил нормальные коментарии

16.08.08

Завидная плодовитость у Сергеева Алексея !

 
Sart писал (а) >>

Завидная плодовитость у Сергеева Алексея !

+1 :)

 
1. Cделал более-менее нормальный обмен между MetaTrader и VC++ через заголовки.
- CreatePattern - создает файл входных, выходных векторов, также записывает в заголовок информацию про количество шаблонов и размерности выходов/выходов.
- Далее VC++ читает и создает аналогичную массивы у себя. После обработки сеткой он создает файл того же имени, но с типом .wgh, куда записывает веса сети, порогов и в заголовок модели сети (число слоев, их размерности)
- Индикатор NeuroInd.mq4 (NeuroIndP) - читает файл весов и строит аналогичную модель у себя и теперь таким же алгоритмом как и CreatePattern проходит по барам и дает этой сетке входы. Индикатор строит выходной вектор. NeuroIndP - читает также, но показывает точки входа.

Скрипт CreatePattern и индюк NeuroInd "связаны" между собой одинаковыми алгоритмами подачи входных векторов за той лишь разницей, что в NeuroInd может быть другая размерность входного вектора (в зависимости как мы решили обработать сетью). Надо попытаться как-нибудь универсализировать этот алгоритм и вынести его в отдельный файл (например в <InputPatternAlg.mqh>). Таким образом в этом комплексе можно будет менять только его.
-----------
2. В структуре классов VC++ избавился от промежуточного CLayers (на мой взгляд это было ошибкой :) + мы чуток экономим память + алгоритм расчета сетки полность совпадает с алгоритмом расчета в индикаторе).
Файлы:
 

Чем больше работаю с сетью, тем больше понимаю, что важны не столько входы, сколько пара вход-выход. В этом отношении очень "полезны для научения" будут статьи с первой стараницы от StatBars. Также заметил, что если выход не бинарный, а непрерывный, то аппроксимация проходит быстрее и вероятно качественнее. (мало противоречивых и повторяющихся пар in-out).

Со входами в принципе все нормально. Квадрат из машек (например 5 периодов по 5 значений в периоде) дают уникальные неповторяющиеся входы. 

А вот выходы...

Тестил на выходе отношение (Up-Dn)/(Up+Dn). Сходится быстро.

Единственный недостаток - это отношение не дает приблизительно знать абсолютную величину Up и Dn, а хотелось бы :) Ему все равно что 10/20 что 50/100

Если же давать на выход просто Up-Dn (чтоб знать величину отклонения цены и в какую сторону), а затем сжать арктангенсом, то получается что происходит насыщение значений.

(сразу скажу что применяю арктангенс, а не линейное сжатие, так как не хотелось бы искать и привязываться к максимумам).

Можно для уменьшения значения насыщения делить (Up-Dn) на коэфициент, тогда насыщение будет происходить на больших значениях, которые уже будут редко встречаться и не будет большой повторяемости и противоречивости.

Еще как вариант наверно нужно попробовать отдельно сети только для изменения Up и для Dn. 

Интересно, есть ли у кого другие выходы?

 
sergeev писал (а) >>

Чем больше работаю с сетью, тем больше понимаю, что важны не столько входы, сколько пара вход-выход. В этом отношении очень "полезны для научения" будут статьи с первой стараницы от StatBars. Также заметил, что если выход не бинарный, а непрерывный, то аппроксимация проходит быстрее и вероятно качественнее. (мало противоречивых и повторяющихся пар in-out).

Со входами в принципе все нормально. Квадрат из машек (например 5 периодов по 5 значений в периоде) дают уникальные неповторяющиеся входы.

А вот выходы...

Тестил на выходе отношение (Up-Dn)/(Up+Dn). Сходится быстро.

Единственный недостаток - это отношение не дает приблизительно знать абсолютную величину Up и Dn, а хотелось бы :) Ему все равно что 10/20 что 50/100

Если же давать на выход просто Up-Dn (чтоб знать величину отклонения цены и в какую сторону), а затем сжать арктангенсом, то получается что происходит насыщение значений.

(сразу скажу что применяю арктангенс, а не линейное сжатие, так как не хотелось бы искать и привязываться к максимумам).

Можно для уменьшения значения насыщения делить (Up-Dn) на коэфициент, тогда насыщение будет происходить на больших значениях, которые уже будут редко встречаться и не будет большой повторяемости и противоречивости.

Еще как вариант наверно нужно попробовать отдельно сети только для изменения Up и для Dn.

Интересно, есть ли у кого другие выходы?

Вы на каждом баре подаёте какой то входной вектор, и на каждом требуете выход?

 
Эта версия MPS уже чуть лучше, но всё равно ещё не то что надо, нужна замкнутость, т.е. после Short идёт Long, и наоборот.
Файлы:
mps.zip  7 kb
Причина обращения: