У нас есть интересный набор данных о лесных пожарах в Алжире, где нам нужно предсказать, будет ли пожар или нет, на основе различных независимых признаков. Поскольку это проблема классификации, я подумал о преобразовании ее в задачу регрессии, в которой мы будем прогнозировать индекс пожарной погоды (FWI), который будет нашей зависимой функцией.
Давайте углубимся в набор данных, который мы получили от Kaggle.
Информация о наборе данных:
Набор данных включает 244 экземпляра, которые перегруппировывают данные двух регионов Алжира, а именно региона Беджая, расположенного на северо-востоке Алжира, и региона Сиди-Бель-Аббес, расположенного на северо-западе Алжира.
122 экземпляра для каждого региона.
Период с июня 2012 г. по сентябрь 2012 г. Набор данных включает 11 признаков и 1 выходной признак (класс). 244 случая были классифицированы на пожарные (138 классов) и непожарные (106 классов).
Информация об атрибутах:
- Дата: (ДД/ММ/ГГГГ) День, месяц («июнь» – «сентябрь»), год (2012 г.) Наблюдения за погодными данными
- Температура: температура в полдень (максимальная температура) в градусах Цельсия: от 22 до 42.
- Относительная влажность: Относительная влажность в %: от 21 до 90.
- Ws: Скорость ветра в км/ч: от 6 до 29.
- Дождь: общее количество дней в мм: от 0 до 16,8 FWI Компоненты
- Индекс влажности мелкого топлива (FFMC) системы FWI: от 28,6 до 92,5.
- Индекс Duff Moisture Code (DMC) по системе FWI: от 1,1 до 65,9.
- Индекс Кодекса засухи (DC) по системе FWI: от 7 до 220,4.
- Индекс начального спреда (ISI) из системы FWI: от 0 до 18,5.
- Индекс Buildup Index (BUI) по системе FWI: от 1,1 до 68.
- Индекс пожарной погоды (FWI): от 0 до 31,1.
- Классы: два класса, а именно Огонь и не Огонь.
Поэтому первым шагом для любого проекта машинного обучения является изучение данных и проведение исследовательского анализа данных.
Здесь приведен график гистограммы для различных объектов в нашем наборе данных, который поможет лучше понять, как распределяются каждый объект.
Итак, на приведенной выше круговой диаграмме показано, что 43,6% данных относятся к классу «Непожароопасный», а 56,4% данных относятся к классу «Пожароопасный».
Теперь нам нужно выяснить, какова взаимосвязь между каждой функцией, и определить те функции, которые сильно коррелируют, чтобы мы могли отказаться от этих функций.
Мы видим, что существует несколько функций, таких как BUI и DC, которые сильно коррелируют.
На гистограмме выше показан анализ пожаров в регионе Сиди-Бель в Алжире, где мы видим данные за июнь-сентябрь, а из приведенного выше графика мы можем понять, что максимальный пожар пришелся на август. В сентябре месяце было меньше всего пожаров.
Отмечается, что в августе и сентябре произошло наибольшее количество лесных пожаров в обоих регионах. И из приведенного выше графика месяцев мы мало что можем понять. Большинство пожаров произошло в августе, а очень крупные пожары произошли всего за 3 месяца — июнь, июль и август. Меньше пожаров было в сентябре.
После EDA нам нужно разработать функции, а затем обучить модель.
Разработка функций
- Мы удалили из набора данных несколько столбцов, таких как день, месяц и год, которые не имели особого отношения к выходному классу.
- Мы классифицировали как одну из категориальных функций, которую мы закодировали, преобразуя в числовые значения, такие как огонь->1, а не огонь->0.
- Мы удалили «BUI» и «DC», поскольку эти две функции тесно связаны между собой.
- Масштабирование объектов выполняется с помощью Standard Scaler.
Здесь у нас есть коробчатые диаграммы, показывающие до и после масштабирования признаков.
Обучение моделей
Итак, в этой постановке задачи, поскольку это проблема регрессии, мы использовали линейную регрессию.
Средняя абсолютная ошибка составляет 0,564, а оценка R2 — 0,984.
Мы будем использовать две разные регуляризации, чтобы выбрать лучшую модель для прогнозирования.
- Лассо-регрессия
- Ридж-регрессия
- Регрессия ElasticNet
Представьте, что проблема, которую вы пытаетесь решить, заключается в наличии множества функций, например 100–200 функций, которые будут влиять на производительность вашей модели, поэтому в этом случае нам нужно выбрать важные функции и исключить другие функции, которые не так важны. Чтобы решить эту проблему, мы используем Лассо-регрессию.
Давайте посмотрим на другой случай, когда ваша модель работает очень хорошо в обучающем наборе и хуже в тестовом наборе, тогда мы можем понять, что существует проблема переобучения, поэтому для решения проблемы переобучения мы используем ридж-регрессию.
Для лассо-регрессии мы имеем MAE как 1,13 и оценку R2 как 0,95.
Приведенная выше диаграмма рассеяния представляет собой прогнозируемое и фактическое значение регрессии Лассо.
Для ридж-регрессии мы имеем MAE, равный 0,56, и показатель R2, равный 0,984.
Приведенная выше диаграмма рассеяния представляет собой сопоставление прогнозируемого и фактического значений для ридж-регрессии.
Для эластичной чистой регрессии мы имеем MAE 1,88 и оценку R2 0,875.
Приведенная выше диаграмма рассеяния представляет собой сравнение прогнозируемого и фактического значений для эластичной чистой регрессии.
Выбор модели: мы выбрали ридж-регрессию, поскольку показатель R2 (0,984) был лучше по сравнению с другими моделями.
Развертывание модели
Мы разработали приложение flask в качестве внешнего приложения, где пользователь может ввести необходимое поле и спрогнозировать FWI. Было создано два файла Pickle: один — «ridge.pkl», который является нашей лучшей моделью, выбранной после обучения, и «scaler.pkl», который можно использовать для стандартизации данных.
Git-хаб: https://github.com/prasenjit2022/forest_fire_prediction
Пожалуйста, поставьте лайк, поделитесь со мной и подпишитесь на меня, чтобы получать больше такого информативного контента о машинном обучении и искусственном интеллекте.