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

Мы взяли наш набор данных из Kaggle. Данные содержат почасовые данные о погоде в Дели. На самом деле он был собран с использованием API веб-сайта «Weather Underground».

АНАЛИЗ ДАННЫХ

  1. В данных есть 100990 экземпляров и 20 признаков.
  2. Даты варьируются от 01–11–1996 до 24–04–2017, и погода записывается через равные промежутки времени. Следовательно, этот набор данных можно использовать как данные временных рядов, а также как обычную задачу классификации.
  3. Столбец «_conds» имеет категориальные значения и представляет погодные условия Дели, поэтому мы возьмем зависимую переменную/целевую переменную как «_conds», которая была переименована в «Условия». Остальные характеристики являются независимыми переменными и будут использоваться для прогнозирования погодных условий.
  4. Когда мы нашли процент нулевых значений. Особенности с процентом ›60% следующие:

Тепловой индекс 71,13%

осадкиТип 100,00%

98,93%

Холод ветра 99,42%

Отсюда делаем вывод: -

  • Мы будем удалять столбцы с высоким процентом нулевых значений.
  • Нам придется обрабатывать нулевые значения.
  1. Различные типы значений в столбце и их соответствующие значения:

Примеры:-

Имя: Туман, dtype: int64

0 80791

1 5382

Имя: WindDirection, dtype: int64

Север 19034

Запад 11888

ЗСЗ 7464

Восток 7233

NW 7117

  1. Есть две функции — «Условия» и «Направление ветра», которые имеют категориальные значения, такие как дым, дымка и т. д., а также север, юг и т. д. соответственно. Нам придется заменить их уникальными числовыми значениями.
  2. Мы получаем описание данных: - В «температуре» среднее значение равно 25,451, а максимальное значение равно 90, среднее значение влажности равно 57,9, а максимальное значение равно 243. Здесь мы видим, что максимальное значение температуры и влажности нереалистично и, следовательно, обнаруживаются некоторые выбросы.

ПРЕДВАРИТЕЛЬНАЯ ОБРАБОТКА ДАННЫХ

i) Импорт библиотек и загрузка данных

  1. Импортированные библиотеки: pandas, numpy, matplotlib.pyplot, seaborn.
  2. Необработанные данные загружаются в фрейм данных pandas.

ii) Временные ряды

  1. Данные о погоде с 01–11–1996 по 24–04–2017, а также за каждый день, они имеют почасовые данные, поэтому в основном это данные за указанный период времени с точками данных, записанными через равные промежутки времени, и могут рассматриваться как время -series data.Формат 'datetime_utc' изменен на strftime('%Y-%m-%d %H'), а индекс фрейма данных установлен на 'datetime_utc'.
  2. Он показывает «индекс» как тип «объекта», который необходимо преобразовать в дату и время, иначе мы не сможем работать во время анализа временных рядов.

ii) Очистка данных

  1. Удаление выбросов. В описании данных мы обнаружили, что максимальное значение температуры равно 90, а влажности – 243, что нереально (мы можем видеть это, используя базовые знания предметной области), поэтому нам нужно удалить выбросы. Точки данных со значением температуры ‹50 и значением влажности‹=100 сохраняются, а нереалистичные выбросы отбрасываются.
  2. Обработка нулевых значений. Данные содержат нулевые значения, как мы обнаружили во время анализа, поэтому мы заменим их средними значениями соответствующих столбцов.
  3. Мы снова обнаружили, что некоторые функции имеют нулевые значения:

Состояние 72

Направление ветра 14755

Эти две функции имеют категориальные значения, поэтому удалите строки с нулевыми значениями.

iii) Разработка функций

  1. Переименование функций в осмысленные имена, такие как:-’ _conds’ в ‘’Condition’ и ‘ _tempm’ в ‘Temperature’.
  2. Мы удалим функции с нулевым процентом > 60%. Четыре функции, а именно «HeatIndex», «precipitationType», «Wgustm» и «WindChill», будут удалены.
  3. Функции «Состояние» и «Направление ветра» имеют категориальные значения, поэтому мы заменяем их уникальными числовыми значениями. Например, дым заменяется на 0, дымка заменяется на 1 и так далее.

Визуализация данных и эффект предварительной обработки

  1. Взглянув на погодные условия Дели из самих исходных данных: -

Мы можем ясно видеть, что большую часть времени Дели либо туманен, либо наполнен дымом.

  1. Давайте рассмотрим один атрибут, например «Температура», и посмотрим, как на него повлияет предварительная обработка:

Необработанные данные:-

Мы можем видеть сезонную закономерность во временном ряду. Он не является непрерывным, поскольку в нем отсутствуют некоторые данные (например, между 2000 и 2001 гг.). Длинные побеги, которые мы видим на графике, являются выбросами. После предварительной обработки: -

Мы видим, что выбросы (длинные побеги) удалены. Отсутствующие данные заполняются таким образом, чтобы сохранялась сезонная картина, а данные были полезными и непрерывными.

Мы также можем видеть то же самое для функции влажности:

Перед предварительной обработкой:-

После предварительной обработки:-

Анализ данных после предварительной обработки: –

Форма данных: 86177 строк и 15 признаков без нулевых значений ни в одном признаке.

Цель:классификация на основе погодных условий с использованием другой модели классификации.

Предварительная обработка: мы визуализировали данные с использованием TSNE двух измерений, данные не являются линейно разделимыми. На графике мы можем визуализировать столбец «Условие» с 39 различными классами.

Мы выбрали разные целевые значения, такие как «Температура» и «Условие», к которым мы применили разные модели. Мы выбрали разные столбцы в качестве целевой переменной, потому что некоторые столбцы коррелируют с другими столбцами. Мы разделили данные на соотношение 70:30, где 70 — для набора поездов, а 30 — для тестового набора. Мы использовали разделение тестов поезда от Sklearn для разделения набора данных.

Модели и их реализация:

(1.) Логистическая регрессия:

Модель. Логистическая регрессия — это одна из моделей классификации для прогнозирования вероятности целевого класса. Логистическая регрессия используется для бинарной классификации. Но если данные мультиклассовые, мы будем использовать ту же идею бинарной классификации для мультиклассовой классификации. Эта модель будет предсказывать класс зависимой переменной на основе независимой переменной.

Реализация: мы использовали библиотеку sklearn для применения модели LogisticRegression к нашему набору данных. В нашей модели выбранные нами целевые столбцы имеют несколько классов. Поэтому мы должны применить «ovr» или «multinomial» в качестве параметра multi_class в модели логистической регрессии. Мы установили max iter=10000, чтобы решатель мог легко сходиться. Эта модель не очень хороша для классификации, поскольку мы заметили, что данные не могут быть разделены с использованием этих функций.

(2.) Машина опорных векторов:

Модель: в классификации можно использовать машину опорных векторов. SVM — это алгоритм обучения с учителем. Основная идея использования SVM в нашем наборе данных состоит в том, чтобы создать границу решения в n-мерном пространстве классов. Граница наилучшего решения будет называться гиперплоскостью. Поскольку мы визуализировали данные с помощью TSNE, данные не являются линейно разделимыми, поэтому для классификации мы будем использовать приемы ядра. SVM отобразит наши точки данных в пространстве и увеличит расстояние между объектами, присутствующими в наборе данных.

Реализация: мы использовали библиотеку sklearn для применения модели SVC к нашему набору данных. В нашей модели мы применили CV поиска по сетке к набору данных и получили лучшие параметры. У нас есть ядро ​​​​как «rbf», C = 1 и гамма = 0,1. Затем мы применили лучший параметр, полученный из GridSearchCV, к нашей модели.

(3.) K Ближайший сосед:

Модель: для классификации можно использовать K-ближайший сосед. Объект будет классифицироваться большинством голосов его k ближайшего соседа. Здесь K — гиперпараметр. Это непараметрический метод. Это также алгоритм обучения на основе экземпляров. Здесь мы не использовали какую-либо базовую функцию во время обучения. После визуализации данных с помощью TSNE мы можем визуализировать, что есть некоторая область, в которой присутствуют точки данных определенного класса. Таким образом, мы будем использовать K ближайших соседей в нашем наборе данных.

Реализация: мы использовали библиотеку sklearn для применения KNeighborsClassifier к нашему набору данных. Мы применили GridSearchCV для получения наилучшего гиперпараметра. GridSearchCv возвратил n_neighbors=9 для набора данных. Затем мы применили лучшие параметры к модели KNN, используя наш набор данных.

(4.) Дерево решений:

Модель.Дерево решений — это один из алгоритмов классификации, используемых для прогнозирования класса неизвестной точки данных путем их сортировки в структуру на основе дерева от корня до листа. Листовой узел определит значение класса для прогноза. Поскольку после применения предварительной обработки к набору данных осталось 14 признаков. Так что дерево решений будет хорошим вариантом. Мы можем предсказать класс неизвестной точки данных на основе обхода древовидной структуры. Дерево создается с использованием наиболее важных функций в наборе данных. Принятие решений будет осуществляться на основе листьев дерева.

Реализация: мы использовали библиотеку sklearn для применения к нашему набору данных. Мы установили параметры в классификаторе как Критерий = «энтропия». Мы получили дерево решений, используя библиотеку sklearn.

(5.) Случайный лес:

Модель. Случайный лес также является одним из алгоритмов классификации. Это будет построено с использованием различных структур случайно выбранного дерева решений. К этим деревьям применяется метод ансамбля. Все дерево, присутствующее в случайном лесу, будет предсказывать класс для отдельного дерева экземпляра. Класс, который наберет наибольшее количество голосов, будет известен как класс экземпляра. Поскольку после применения предварительной обработки к набору данных осталось 14 признаков. Так что случайный лес будет хорошим вариантом. Он будет предсказывать класс для экземпляра на основе голосования большинства. Наша цель — предсказать наиболее точный класс для точки данных.

Реализация. Мы использовали библиотеку sklearn для применения RandomForestClassifier к нашему набору данных. Мы установили параметры в классификаторе как n оценщиков = 250, максимальную глубину = 30 и критерий как «энтропию». Мы получаем Random Forest Tree, используя библиотеку sklearn.

Результаты: