С помощью данных о погоде спрогнозируйте дождь на следующий день в Австралии.

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

Прогнозирование погоды требует острых навыков наблюдения и знания погодных условий. С помощью обученных моделей глубокого обучения мы можем определять закономерности в данных, чтобы делать прогнозы на ближайшие дни.

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

Реализация идеи на cAInvas - здесь!

Набор данных

On Kaggle от Джо Янга и Адама Янга

Наблюдения проводились с многочисленных метеостанций. Ежедневные наблюдения доступны на сайте http://www.bom.gov.au/climate/data.
Пример последних наблюдений за погодой в Канберре: http://www.bom.gov.au /climate/dwo/IDCJDW2801.latest.shtml

Определения адаптированы из http://www.bom.gov.au/climate/dwo/IDCJDW0000.shtml
Источник данных: http://www.bom.gov.au/climate/dwo/ и Http://www.bom.gov.au/climate/data.

Авторские права Австралийское содружество 2010 г., Бюро метеорологии.

Набор данных представляет собой файл CSV с ежедневными наблюдениями за погодой за 10 лет из многих мест по всей Австралии. Различные функции в наборе данных указывают информацию о погоде на данный день, а RainTomorrow является целевым атрибутом.

Некоторые столбцы имеют значения NaN. Давайте проверим, сколько значений NaN содержится во фрейме данных.

Слишком много значений NaN! Один из вариантов - их заполнение, но здесь мы будем отбрасывать их, так как их слишком много, и их заполнение может окрашивать набор данных.

Предварительная обработка

Входные атрибуты

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

Location, WindGustDir, WindDir9am, WindDir3pm - это столбцы, значения которых не зависят от диапазона. Используется функция get_dummies () библиотеки Pandas, а для параметра drop_first установлено значение True. Это означает, что если в столбце n категорий, возвращается n-1 столбец вместо n. т.е. каждое значение возвращается как массив значений n-1. Первая категория определяется массивом со всеми нулями, в то время как остальные переменные категории n-1 представляют собой массивы с 1 в (i-1) -м индексе массива.

После этого 4 столбца удаляются, так как они больше не нужны.

Значения столбца RainToday могут быть получены из столбца RainfallMeasurement, и значение Date здесь также не требуется. Оба могут быть удалены.

Целевой атрибут

RainTomorrow - это столбец с двоичными значениями, в котором символы представляют два класса. Изменение их типа данных на целое число, которое будет использоваться в качестве цели для модели.

Балансировка набора данных

Взгляните на разброс меток классов во фрейме данных -

Это несбалансированный набор данных. Чтобы сбалансировать набор данных, есть два варианта:

  • upsampling - передискретизация значений для увеличения их количества в наборе данных.
  • даунсэмплинг - выберите n выборок из каждой метки класса, где n = количество выборок в классе с наименьшим количеством, то есть уменьшение количества определенных значений класса в наборе данных.

Здесь мы будем повышать дискретизацию. Повторная выборка значений, чтобы они были равны в счетчике, может привести к ~ 30k избыточным значениям. Поэтому мы ограничиваем его до 20 тыс. Значений в метке класса 1, в результате чего получаем только ~ 8 тыс. Избыточных строк,

Разделение поезд-валидация-тест

Использование соотношения 80–10–10 для разделения фрейма данных на наборы для проверки и проверки. Для этого используется функция train_test_split модуля sklearn.model_selection. Затем они делятся на X и y (ввод и вывод) для дальнейшей обработки.

Стандартизация

Использование df.describe () показывает, что стандартное отклонение значений атрибутов в наборе данных не одинаково для всех из них. Это может привести к тому, что одни атрибуты будут иметь больший вес, чем другие. Значения всех атрибутов масштабируются так, чтобы иметь среднее значение = 0 и стандартное отклонение = 1 по отношению к конкретным столбцам.

Для реализации этой концепции используется функция StandardScaler модуля sklearn.preprocessing. Экземпляр сначала соответствует обучающим данным и используется для преобразования обучающих, проверочных и тестовых данных.

Модель

Модель проста с 3 плотными слоями, 2 из которых имеют функции активации ReLU, а последний имеет функцию активации сигмовидной формы, которая выводит значение в диапазоне [0, 1].

Поскольку это проблема двоичной классификации, модель составляется с использованием двоичной функции потерь кросс-энтропии. Используется оптимизатор Adam, и точность модели отслеживается по эпохам.

Функция обратного вызова EarlyStopping модуля keras.callbacks отслеживает потерю проверки и останавливает обучение, если она не уменьшается в течение 5 периодов непрерывно. Параметр restore_best_weights гарантирует, что модель с наименьшими потерями при проверке будет восстановлена ​​в переменной модели.

Модель была обучена со скоростью обучения 0,01 и достигла точности ~ 84,5% на тестовой выборке.

Построение матрицы путаницы, чтобы лучше понять результаты -

Чем больше уникальных значений для класса дождя, тем выше точность.

Метрики

Прогноз

Давайте сделаем прогнозы на случайных выборках тестовых данных -

deepC

Библиотека, компилятор и среда вывода deepC предназначены для включения и выполнения нейронных сетей с глубоким обучением путем сосредоточения внимания на функциях устройств малого форм-фактора, таких как микроконтроллеры, eFPGA, процессоры и другие встроенные устройства, такие как raspberry-pi, odroid, Arduino, SparkFun Edge, RISC-V, мобильные телефоны, портативные компьютеры x86 и другие.

Компиляция модели с использованием deepC -

Перейдите на платформу cAInvas (ссылка на записную книжку указана ранее) и проверьте прогнозы в файле .exe!

Авторы: Ayisha D