(N = 90) Направление вперед Прогнозирование с использованием нейронной сети:
Я пытаюсь предсказать на 3 минуты вперед, т.е. на 180 пунктов вперед. Поскольку я сжимал данные временного ряда, беря среднее из каждых 2 точек как одно, я должен предсказать (N = 90) предсказание на шаг впереди.
Данные временных рядов приведены в секундах. Значения находятся между 30-90. Обычно они перемещаются от 30 до 90 и от 90 до 30, как показано в примере ниже.
Мои данные могут быть доступны: https://www.dropbox.com/s/uq4uix8067ti4i3/17HourTrace.mat
У меня возникают проблемы с внедрением нейронной сети, чтобы предсказать N пунктов вперед. Моя единственная функция - предыдущее время. Я использовал возвратную нейронную сеть elman, а также newff.
В моем сценарии мне нужно предсказать на 90 очков вперед. Сначала, как вручную отделить данные ввода и цели: Например:
data_in = [1,2,3,4,5,6,7,8,9,10]; //imagine 1:10 only defines the array index values.
N = 90; %predicted second ahead.
P(:, :) T(:) it could also be(2 theta time) P(:, :) T(:)
[1,2,3,4,5] [5+N] | [1,3,5,7,9] [9+N]
[2,3,4,5,6] [6+N] | [2,4,6,8,10] [10+N]
...
до тех пор, пока он не достигнет конца данных
У меня есть 100 входных точек и 90 точек вывода в повторяющихся нейронных сетях Elman. Каким может быть наиболее эффективный скрытый размер node?
input_layer_size = 90;
NodeNum1 =90;
net = newelm(threshold,[NodeNum1 ,prediction_ahead],{'tansig', 'purelin'});
net.trainParam.lr = 0.1;
net.trainParam.goal = 1e-3;
//В начале моего обучения я фильтрую его с помощью kalman, нормализуя в диапазон [0,1], после чего я перетасовывал данные. 1) Я не смогу подготовить свои полные данные. Сначала я попытался подготовить полные данные M, которые составляют около 900 000, что не дало мне решения.
2) Во-вторых, я пробовал итеративно тренироваться. Но на каждой итерации новые добавленные данные объединяются с уже подготовленными данными. После 20 000 подготовленных данных точность начинает уменьшаться. Первые подготовленные 1000 данных отлично подходят для обучения. Но после того, как я начинаю iterativelt объединить новые данные и продолжить обучение, точность обучения очень быстро падает с 90 до 20. Например.
P = P_test(1:1000) T = T_test(1:1000) counter = 1;
while(1)
net = train(net,P,T, [], [] );%until it reaches to minimum error I train it.
[normTrainOutput] = sim(net,P, [], [] );
P = [ P P(counter*1000:counter*2000)]%iteratively new training portion of the data added.
counter = counter + 1; end
Этот подход очень медленный, и после точки он не даст никаких хороших результатов.
Мой третий подход - итеративное обучение; Это было похоже на предыдущее обучение, но на каждой итерации я только тренирую 1000 частей данных, не делаю никакого слияния с предыдущими данными. Например, когда я тренирую первые 1000 данных, пока не достигнет минимальной ошибки, которая имеет > 95% точность. После того, как он был обучен, когда я сделал то же самое для второй 1000 частей данных, он перезаписывает вес, а предиктор в основном ведет себя как последняя часть данных поезда.
> P = P_test(1:1000) T = T_test(1:1000) counter = 1;
while(1)
> net = train(net,P,T, [], [] ); % I did also use adapt()
> [normTrainOutput] = sim(net,P, [], [] );
>
> P = [ P(counter*1000:counter*2000)]%iteratively only 1000 portion of the data is added.
> counter = counter + 1;
end
Обученные DATA: Эта цифра - это снимок из моего обученного набора, синяя линия - это исходный временной ряд, а красная линия - это предсказанные значения с обученной нейронной сетью. MSE составляет около 50.
Протестированные данные: На приведенном ниже рисунке вы можете увидеть мое предсказание для моих тестовых данных с нейронной сетью, которая обучается 20 000 входных точек, сохраняя при этом ошибку MSE < 50 для данных обучения задавать. Он способен ловить несколько шаблонов, но в основном я не даю реальной хорошей точности.
Я не смог добиться успеха ни одним из этих подходов. На каждой итерации я также замечаю, что небольшое изменение альфы полностью перезаписывается уже подготовленным данным и больше фокусируется на обучаемой части данных. Я не смогу придумать решение этой проблемы. В итеративном обучении я должен держать курс обучения небольшим и количество эпох столь же небольшим.
И я не мог найти эффективный способ предсказать на 90 очков вперед во временных рядах. Любые предложения, которые я должен сделать, чтобы предсказать N пунктов вперед, любой учебник или ссылку для информации.
Каков наилучший способ для итеративного обучения? По моему второму подходу, когда я достигаю 15 000 подготовленных данных, размер обучения начинает внезапно снижаться. Итерационно следует ли менять альфа во время выполнения?
==========
Любое предложение или то, что я делаю неправильно, будет очень оценено.
Я также реализовал рекуррентную нейронную сеть. Но при подготовке больших данных я столкнулся с одинаковыми проблемами. Возможно ли адаптивное обучение (онлайн-обучение) в Recurrent Neural Networks для (newelm)? Вес не будет обновляться, и я не видел никаких улучшений.
Если да, как это возможно, какие функции я должен использовать?
net = newelm(threshold,[6, 8, 90],{'tansig','tansig', 'purelin'});
net.trainFcn = 'trains';
batch_size = 10;
while(1)
net = train(net,Pt(:, k:k+batch_size ) , Tt(:, k:k+batch_size) );
end