С помощью данных о погоде спрогнозируйте дождь на следующий день в Австралии.
Прогноз погоды - это предсказание того, какой будет погода в ближайшие дни. Атмосферное давление, температура, влажность, ветер и другие измерения используются метеорологами наряду с другими методами для прогнозирования погоды.
Прогнозирование погоды требует острых навыков наблюдения и знания погодных условий. С помощью обученных моделей глубокого обучения мы можем определять закономерности в данных, чтобы делать прогнозы на ближайшие дни.
Здесь мы используем современные погодные условия в разных городах Австралии, чтобы предсказать дождь на следующий день.
Реализация идеи на 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