2015-11-02 2 views
0

Я прочитал несколько идей относительно правильного размера выборки для Нейронных сетей Feed Forward. x5, x10 и x30 - количество весов. Эта часть меня не слишком беспокоит, я беспокоюсь о том, могу ли я повторно использовать свои данные обучения (случайно).Повторное использование данных скольжения для нейронной сети для временных рядов?

Мои данные разбиты как так

5 независимых переменных и зависимой 1 вар на образец.

Я планировал на кормление 6 образцов в (6х5 = 30 входных нейронов), подтверждают зависимую переменную 7-образцов (1 выходной нейрон.

Я бы поезд на нейронной сети, выполнив сказать, 6 или 7 итераций. Перед пытаясь предсказать следующую итерацию вне моих обучающих данных.

Скажем, у меня есть

каждого образца = 5 независимых переменных & 1 зависимые переменные (6 вары общая на образец)

Выход = только 1 зависимой переменной

Образец: Образец: Образец: Образец: Образец: ственном образце> Выход (в зависимости от вар)

Обучение скользящего окна 1:

Набор 1: 1: 2: 3: 4: 5: 6-> 7

Набор 2: 2: 3: 4: 5: 6: 7-> 8

Набор 3: 3: 4: 5: 6: 7: 8- > 9

Комплект 4: 4: 5: 6: 7: 8: 9-> 10

Набор 5: 5: 6: 7: 6: 9: 10-> 11

Набор 6: 6: 7: 8: 9: 10: 11-> 12

Номера подготовки испытаний: 7: 8: 9: 10: 11: 12 -> 13

Обучение Раздвижные окна 2:

Набор 1: 2: 3: 4: 5: 6: 7-> 8

Набор 2 : 3: 4: 5: 6: 7: 8-> 9

...

Набор 6: 7: 8: 9: 10: 11: 12-> 13

Non тест Обучение: 8: 9: 10: 11: 12: 13-> 14

Я подумал, что я бы случайно пропустил мой набор упражнений на итерацию в 30 раз больше моих весов. Я верю в свою сеть, у меня около 6 скрытых нейронов (т. Е. Sqrt (входы * выходы)). Таким образом, смещение 36 + 6 + 1 + 2 = 45. Так 44 х 30 = 1200 работает?

Таким образом, я бы сделал рандомизацию 6 наборов 1200 раз за каждое раздвижное окно тренировки.

Я понял из-за небольшого количества данных, я собирался выполнить симуляционные прогоны (т. Е. Повторить ту же проблему с новыми весами). Так скажите 1000 раз, из которых я делаю 1140 пробегает скользящее окно, используя рандомизацию.

У меня есть 113 переменных, это приводит к 101 тренировочному «скользящему окну».

Другой вопрос, который у меня есть, заключается в том, что я пытаюсь предсказать движение вверх или вниз (то есть зависимую переменную). Должен ли я соответствовать фактическому # или просто, если я правильно угадал движение вверх/вниз? Я думаю, что я должен снимать для фактического числа, но, как часть моего анализа, проверяйте%, если это правильно угадывается как вверх/вниз.

ответ

1

Если у вас есть небольшой объем данных и сравнительно большое количество тренировочных итераций, вы рискуете «перетренировать» - создание функции, которая очень хорошо работает с вашими тестовыми данными, но не обобщает.

Лучший способ избежать этого - получить больше данных обучения! Но если вы не можете, то есть две вещи, которые вы можете сделать. Один из них состоит в том, чтобы разделить данные обучения на данные испытаний и проверки - используя 85% для тренировки и 15% для проверки. Верификация означает вычисление пригодности учащегося на обучающем наборе без корректировки веса/обучения. Когда работоспособность контрольных данных (которые вы не тренируетесь) перестает улучшаться (в целом это будет шумно), и ваши тренировочные данные по фитнесу продолжают улучшаться - прекратите тренировки. Если, с другой стороны, вы используете «скользящее окно», у вас может не быть хорошего критерия, чтобы знать, когда прекратить обучение, - функция фитнеса будет отскакивать непредсказуемыми способами (вы можете медленно влиять на результат каждой итерации обучения, по параметрам, однако, чтобы дать вам конвергенцию ... может быть, не самый лучший подход, но некоторые режимы обучения делают это). Другое дело, что вы можете нормализовать вес вашего узла с помощью некоторой метрики, чтобы обеспечить некоторое понятие «гладкости» - если вы визуализировать переработку на секунду, вы обнаружите, что в крайнем случае ваша функция фитнеса резко кривит вокруг ваших положительных результатов ...

Что касается последнего вопроса - для тренировки, чтобы сходиться, ваша фитнес-функция должна быть гладкой. Если бы вы просто использовали бинарные условия «ничего или ничего», скорее всего, что произойдет, так это то, что любой алгоритм, который вы используете для обучения (backprop, BGFS и т. Д.), Не сходится. На практике критерий классификации должен быть активацией, которая выше для положительного результата, меньше или равна отрицательному результату и плавно изменяется в вашем пространстве веса/параметра. Вы можете думать о 0 как «Я уверен, что ответ вверх» и 1 «Я уверен, что ответ опустился» и, таким образом, реализует функцию фитнеса, которая имеет более высокую «стоимость» для неправильных догадок, которые были более определенными ... Есть тонкости в том, как формируется функция (например, у вас могут быть разные представления о том, насколько приемлемыми являются ложные отрицательные и ложные), и вы также можете вводить регионы «неопределенного», где результат ближе к « нулевой вес ", но он обязательно должен быть непрерывным/гладким.

+0

Я мог бы сделать больше «наборов», но было бы стыдно, что вам нужно было сделать более 10 наборов за «окно обучения». Я скажу, что 113 месяцев я хочу предсказать цену на следующий месяц.С множественной регрессией я смог сделать это за 6 месяцев, чтобы предсказать 7-е. Я решил, что смогу сделать это с помощью ann's и что будет достаточно изменений в данных между 6 наборами за «окно обучения» ... Я бы хотел использовать RPROP, но у меня возникли проблемы с его внедрением. Тогда, возможно, я мог бы тренировать ванну на 2 случайных наборах в каждом «окне обучения» – thistleknot

+0

обобщение не имеет большого значения. Сеть предназначена только для конкретной проблемной области. В моем случае, только для следующего набора данных. Сеть не будет переноситься или использоваться для любых новых данных, кроме этого «7-го» набора для каждого «скользящего окна». Я хочу, чтобы он был обобщен для этой цели. Я достиг чего-то подобного в многократном регрессионном анализе на маленьких «скользящих окнах» 6 месяцев, каждый из которых предсказал 7-й месяц. – thistleknot

0

Вы можете повторно использовать скользящие окна.

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

Ниже приведен пример скользящего окна в изобразительной форме (с помощью электронных таблиц магии) http://i.imgur.com/nxhtgaQ.png

https://github.com/thistleknot/FredAPI/blob/05f74faf85d15f6898aa05b9b08d5363fe27c473/FredAPI/Program.cs Строка 294 показывает, как код побежал с помощью рандомизации, он сбрасывает рандомизации в положении 353, так что остальные потоки как обычно.

Я также мог использовать 1 (вверх) или 0 (вниз) в качестве моих целевых значений, и сеть сходилась.

Смежные вопросы