Cтатья: Прогнозирование цен с помощью нейронных сетей - страница 14

 
Neutron, сглаживающий эффект при увеличении числа входов закономерен. А вот отставание может быть определено многими факторами, как недостатком этих входов, так и возможным несовершенством сети, может недообученностью. Другой вопрос, если это при всех "+" на вышеуказанные критерии даёт отставание.
 
Neutron:

Это представлены результаты тестирования предсказательной способности двух НС.


На рис. красным показан исходный временной ряд (ВР), синим - прогноз на 1 бар вперёд линейной однослойной сети, зелёным - нелинейной двухслойной. Глубина погружения в обоих случаях одинакова. Видно, что для этого искусственного случая наблюдается заметное оставание прогнозных данных на трендовом участке ВР. Мне интересно, у моих опытных коллег наблюдается этот эффект, и если да, то с чем он может быть связан?

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

1) сколько нейронов в промежуточных слоях сетей?

2) сколько входов?

3) что подается на входы?


По поводу отставания прогнозов на тренде. Это так и должно было получиться. Ты в сеть подал около 30 обучающих векторов, где подряд растущие на 0.1 значения порождали рост на 0.1, и подал 1 вектор, где такие же подряд растущие порождали падение на 3. Ты обучил сеть на противоречивых данных. Вот она и усреднила эти твои 31 противоречивых прогноза...


Я тоже построил 2-слойную НС. С 3-мя входами и 3-мя промежуточными нейронами. На вход подавались приращения значений. Для сравнения я один раз обучил эту сеть по всем данным, а второй раз исключил из обучения выбросы - т.е. все обучающие векторы, которые содержат во входах слишком большие значения, т.е. тот самый резкий обвал на 3. Разница налицо:

 
rip:
slava1:
Ну об этом можно долго спорить кто что понимает, или не понимает. Разговор был о подготовке данных. Я так понимаю, что этот вопрос никто здесь обсуждать не хочет. Жаль

Если прочесть лекцию как надо готовить данные для обучения НС, то я думаю это надо делать не на этом форуме, здесь это будет мало кому интересно.

ну зря вы так! думаю что было бы интересно почитать опыт практиков, как это делают

 
ds2:

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

1) сколько нейронов в промежуточных слоях сетей?

2) сколько входов?

3) что подается на входы?


По поводу отставания прогнозов на тренде. Это так и должно было получиться. Ты в сеть подал около 30 обучающих векторов, где подряд растущие на 0.1 значения порождали рост на 0.1, и подал 1 вектор, где такие же подряд растущие порождали падение на 3. Ты обучил сеть на противоречивых данных. Вот она и усреднила эти твои 31 противоречивых прогноза...


Я тоже построил 2-слойную НС. С 3-мя входами и 3-мя промежуточными нейронами. На вход подавались приращения значений. Для сравнения я один раз обучил эту сеть по всем данным, а второй раз исключил из обучения выбросы - т.е. все обучающие векторы, которые содержат во входах слишком большие значения, т.е. тот самый резкий обвал на 3. Разница налицо:

ds2, и все, кто откликнулся, спасибо большое за внимание и дельные советы - они реально помогли. Дело в том, что я для ускорения построения прогноза в своей сети жёстко ограничел число циклов обучения (помоему это называется Эпохи) до 100 раз. Конечно, этого оказалось недостаточно и как следствие сеть недообучалась. После увеличения числа эпох до 1000 всё легло точно - тик-в-тик (ну, почти).

Сеть у меня двухслойная, с нелинейностью в виде гиперболического тангенса, с числом нейронов в скрытом слое 2 и числом синапсов d*2+2, где d - размерность входа НС. У меня d=2, для случая приведённого на рис., а число обучающих векторов 6. Количество векторов в обучающей выборке равно числу синапсов, я при этом вижу, что сеть не переобучается и не старается сгладить прогноз, что позволяет отслеживать скачки цены более эффективно. Для обучения я так же на вход подавал последовательность приращений значений. Я пока далёк от тонкого искусства подкготовки входных данных (имею в виду ваше "второй раз исключил из обучения выбросы"), но надеюсь скоро постигну эту премудрость.

Вот преинтересный результат:


Это прогноз на один шаг вперёд с переобучением на каждом шаге однослойной нелинейной НС с ОДНИМ входом! и учебной выборке = 2 векторам по одному элементу в каждом.

Я убит наповал...

Получается, что Неронные Сети и Искусственный Интелект это не просто, а очень просто!

 
Neutron:
ds2:

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

1) сколько нейронов в промежуточных слоях сетей?

2) сколько входов?

3) что подается на входы?


По поводу отставания прогнозов на тренде. Это так и должно было получиться. Ты в сеть подал около 30 обучающих векторов, где подряд растущие на 0.1 значения порождали рост на 0.1, и подал 1 вектор, где такие же подряд растущие порождали падение на 3. Ты обучил сеть на противоречивых данных. Вот она и усреднила эти твои 31 противоречивых прогноза...


Я тоже построил 2-слойную НС. С 3-мя входами и 3-мя промежуточными нейронами. На вход подавались приращения значений. Для сравнения я один раз обучил эту сеть по всем данным, а второй раз исключил из обучения выбросы - т.е. все обучающие векторы, которые содержат во входах слишком большие значения, т.е. тот самый резкий обвал на 3. Разница налицо:

ds2, и все, кто откликнулся, спасибо большое за внимание и дельные советы - они реально помогли. Дело в том, что я для ускорения построения прогноза в своей сети жёстко ограничел число циклов обучения (помоему это называется Эпохи) до 100 раз. Конечно, этого оказалось недостаточно и как следствие сеть недообучалась. После увеличения числа эпох до 1000 всё легло точно - тик-в-тик (ну, почти).

Сеть у меня двухслойная, с нелинейностью в виде гиперболического тангенса, с числом нейронов в скрытом слое 2 и числом синапсов d*2+2, где d - размерность входа НС. У меня d=2, для случая приведённого на рис., а число обучающих векторов 6. Количество векторов в обучающей выборке равно числу синапсов, я при этом вижу, что сеть не переобучается и не старается сгладить прогноз, что позволяет отслеживать скачки цены более эффективно. Для обучения я так же на вход подавал последовательность приращений значений. Я пока далёк от тонкого искусства подкготовки входных данных (имею в виду ваше "второй раз исключил из обучения выбросы"), но надеюсь скоро постигну эту премудрость.

Для улучшения выборки попробуйте расширить обучающий ряд, скажем по такому принципу:

есть два соседних значения ряда - x1,x2 в промежуток них добавить x1,2 = (x1+x2)/2


Этот метод хорошо работает на временных рядах, с большой корреляций соседних значений.

Случай потока котировок, как раз этот ...

 
Neutron:


Вот преинтересный результат:


Это прогноз на один шаг вперёд с переобучением на каждом шаге однослойной нелинейной НС с ОДНИМ входом! и учебной выборке = 2 векторам по одному элементу в каждом.

Я убит наповал...


Можно попросить выложить файл с исходными данным, с которых формировались обучающие вектора?

 

Как должен выглядеть формат файла, что бы он был вами прочитан. Дело в том, что я сам пишу НС с "нуля" и использую данные в удобном МНЕ формате.


Для улучшения выборки попробуйте расширить обучающий ряд, скажем по такому принципу:

есть два соседних значения ряда - x1,x2 в промежуток них добавить x1,2 = (x1+x2)/2

Этот метод хорошо работает на временных рядах, с большой корреляций соседних значений.

Случай потока котировок, как раз этот ...

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

И ещё. Хорошо если уважаемые форумчане выложат обоснованные доводы в пользу большей прогностической способности 2-х слойной НС по отношению к однослойной при прочих равных условиях.

Как вариант. Ниже выложин zip архив с тестовым вектором, который приведён на рис. Режте его сами как посчитаете нужным.

Файлы:
rnd.zip  1 kb
 
Neutron:

Я убит наповал...

Получается, что Неронные Сети и Искусственный Интелект это не просто, а очень просто!


Я пока не пытался практически применять НС (хотя в контексте последней идеи меня кажется туда несёт), но с человеческой точки зрения тестовый вектор состоит из очень простых зависимостей (порядка двух-трёх параметров) и должен очень легко кусочно аппроксимироваться. Подозреваю, НС именно этим и занимается. Быстрая же перестройка может быть следствием как раз простоты НС, то есть в данном случае короткая память есть счастье.

 

В целом, Candid, я с тобой согласен, но хочется копнуть глубже... Например, насколько оправдано усложнение НС (скрытыми слоями).

А, вобще, меня несёт! Дело в том, что если представить нелинейность НС в определённой форме, то можно получить ТОЧНОЕ аналитическое решение для весов. Это, в свою очередь, означает, что можно будет отказаться от метода Обратного Распространения Ошибки для тренировки сети и получать результат максимально точный в одно действие, без всяких там 1000 Эпох тренировок!!!


P.S. Я тут забыл предупредить, что в каждом нейроне использую один синапс с постоянным уровнем возбуждения.


Дописка.

Несло-несло и пронесло ;-)

Это "ТОЧНОЕ" аналитическое решение для весов однослойной нелинейной НС:

Меня улыбнуло.

Зато весь расчёт занимает 1 милисекунду.
 

Поясните мне как начинающему "нейроисследователю" такую вещь... я так понимаю что сеть о которой идет речь это многослойный перцептрон. 

А из каких соображений выбран именно этот тип сети, почему не Хопфилд или Кохонен, или еще какая нибудь?

Причина обращения: