Прогноз погоды с помощью нейронной сети

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

Я смущен тем, как предоставить эти данные входному слою. Каждому входному узлу должны быть предоставлены все данные за данный день, или мне нужно иметь другую сеть для каждого параметра? Меня также смущает выходной слой.


person amey    schedule 07.02.2010    source источник


Ответы (3)


Во входном слое есть X отдельных узлов для каждого измерения (погода, ветер и т. д.) входных данных, где X — количество дней, на которые нужно оглянуться (скажем, 4-7). Затем вы должны нормализовать каждое входное измерение в подходящем диапазоне, скажем, [-1.0, 1.0].

Иметь второй «скрытый» слой, полностью связанный с первым слоем (а также с входным узлом «смещения» fix 1.0, который будет служить точкой фиксации). Здесь должно быть меньше узлов, чем во входном слое, но это просто эмпирическое правило, возможно, вам придется поэкспериментировать.

Последний слой — это ваш выходной слой, полностью взаимосвязанный со вторым слоем (и также сбрасывающий смещение). Имейте отдельный выходной нейрон для каждого измерения.

Не забывайте тренироваться с нормализованными значениями как на входе, так и на выходе. Поскольку это временной ряд, вам может не понадобиться рандомизировать порядок обучающих данных, а подавать их по мере их поступления во времени — ваша сеть также будет изучать временные отношения (если повезет:)

(Также обратите внимание, что существует метод, называемый «временным обратным распространением», который настроен для данных временных рядов.)

person ron    schedule 07.02.2010
comment
Было бы правильно предположить, что чем больше взаимосвязанных переменных включено, тем точнее? т.е. используя {Temp, Pressure, Humidity}, лучше, чем {Rainfall, Windspeed, UV Index}? - person Aaron Gage; 11.02.2011
comment
@Aaron: всегда лучше использовать больше связанных переменных, однако, если существует сильная связь, сеть может учиться, используя и другие переменные. Также обратите внимание, что может потребоваться преобразование некоторых данных (например, в логарифмическом масштабе и т. д.), чтобы сеть могла лучше учиться. - person ron; 13.02.2011

Мне кажется, что деревья решений могут быть лучшим решением этой проблемы, чем нейронные сети. Здесь описано, как работают деревья решений. Кроме того, доступно программное обеспечение, в котором реализованы различные классификаторы, включая нейронные сети. Я работал с Weka, и это работает очень хорошо. Существуют также библиотеки, которые вы можете использовать для использования функциональности Weka с такими языками программирования, как Java и C#. Если вы решите работать с Weka, обязательно ознакомьтесь с описанным форматом .arff здесь.

person brozo    schedule 07.02.2010
comment
Если вы заинтересованы в использовании Weka, одним из вариантов может быть попробовать Knime, пакет рабочего процесса на основе eclipse, который включает примитивы Weka. - person Binary Nerd; 07.02.2010
comment
Мне любопытно, как бы вы применили деревья решений к этой проблеме. - person brian; 08.02.2010

Я использовал (и владею) этой книгой: Introduction to Neural Networks с Java

Я нашел это полезной ссылкой. Он охватывает широкий спектр тем NN, включая обратное распространение.

person Binary Nerd    schedule 07.02.2010