Введение

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

Цель проекта

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

Набор данных

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

Ссылка на набор данных: https://drive.google.com/file/d/1xJfXSY3Fvifb-gg10ipo2pPb-zp25vgl/view?usp=sharing

Мы построили круговую диаграмму, чтобы проверить процентное распределение целевой переменной.

Подготовка данных

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

Модель классификации

Классификатор случайного леса — это алгоритм машинного обучения, принадлежащий к семейству ансамблевых моделей. Это тип алгоритма на основе дерева решений, который объединяет несколько деревьев решений для создания единой модели. В этом алгоритме создается лес деревьев решений, где каждое дерево обучается на различном подмножестве обучающих данных. Термин «случайный» в названии алгоритма относится к тому факту, что каждое дерево в лесу обучается на случайном подмножестве признаков из набора данных. Это помогает снизить риск переобучения, который возникает, когда модель слишком сложна и хорошо работает на обучающих данных, но плохо на новых данных. Используя разное подмножество функций для каждого дерева, алгоритм случайного леса создает более разнообразный набор моделей, которые лучше подходят для обобщения новых данных.

Чтобы сделать прогноз с использованием классификатора случайного леса, алгоритм пропускает входные данные через каждое дерево решений в лесу, и прогноз каждого дерева считается «голосом». Затем окончательный прогноз определяется на основе большинства голосов всех деревьев в лесу. Классификатор случайного леса — это популярный алгоритм для задачи классификации, который использовался в широком диапазоне приложений, таких как прогнозирование лидов, обнаружение мошенничества, классификация изображений и т. д. Некоторые из преимуществ использования классификатора случайного леса включают его способность обрабатывать большие наборы данных, его устойчивость к выбросам и способность обрабатывать отсутствующие данные.

Существуют различные гиперпараметры случайного леса, которые можно настроить для повышения производительности классификатора случайного леса, например, нет. оценок, максимальной глубины, минимального разделения выборки и минимального листа выборки. Эти гиперпараметры могут привести к недообучению или переоснащению модели, поэтому очень важно выполнить настройку гиперпараметров, чтобы получить оптимальное значение этих гиперпараметров, а для выполнения настройки гиперпараметров мы собираемся использовать метод под названием Randomized Search CV. .

Randomized Search CV – это метод, используемый в машинном обучении для выполнения оптимизации гиперпараметров, который включает выбор наилучшего набора гиперпараметров для модели. В Randomized Search CV указанное количество случайных комбинаций гиперпараметров выбираются из предварительно определенного пространства поиска. Затем модель обучается и оценивается для каждой из этих комбинаций, и комбинация, дающая наилучший показатель производительности, выбирается в качестве оптимального набора гиперпараметров.

По сравнению с Grid Search CV, который выполняет исчерпывающий поиск по всем возможным комбинациям гиперпараметров. Рандомизированный поиск CV более эффективен, поскольку он выполняет поиск только в случайном подмножестве комбинаций, что снижает вычислительные затраты. Рандомизированный поиск CV особенно полезен, когда пространство поиска гиперпараметров велико, а вычислительные затраты на обучение модели высоки. Используя Randomized Search CV, можно более эффективно исследовать пространство поиска, что позволяет быстрее идентифицировать лучшие гиперпараметры модели.

Механизм предотвращения переобучения

Чтобы избежать переобучения модели, мы собираемся выполнить выбор функций здесь. Выбор функций — один из лучших способов избежать переобучения, и это лучше, чем регуляризация, поскольку регуляризация требует больших вычислительных затрат, с другой стороны, процесс выбора функций прост в реализации и понимании. В этом процессе мы выбираем наиболее важные характеристики, которые в наибольшей степени влияют на качество воды. Здесь мы рассчитали прирост информации для каждой функции, и функции с наименьшим приростом информации были удалены из окончательного набора данных. Получение информации используется для определения полезности функции при разделении набора данных на подмножества, которые являются более однородными по отношению к целевой переменной. Он измеряет снижение энтропии или беспорядка, достигаемое путем разделения данных на основе наличия или отсутствия определенного признака. Чем выше прирост информации, тем более ценным является функция для прогнозирования целевой переменной.

Выбор показателей оценки

В случае несбалансированного набора данных точность не является наиболее подходящей метрикой для оценки производительности модели бинарной классификации, поскольку она может давать вводящие в заблуждение результаты. Это связано с тем, что точность смещена в сторону класса большинства и может показывать высокую точность, даже если модель плохо работает в классе большинства. Вместо этого можно использовать следующие показатели оценки:

  1. Точность. Он измеряет долю истинно положительных (TP) прогнозов от всех положительных прогнозов (TP + FP). Точность является полезной метрикой, когда цель состоит в том, чтобы свести к минимуму ложные срабатывания, т. Е. Модель предсказывает положительный класс только тогда, когда она уверена, что это действительно положительный результат.
  2. Отзыв. Он измеряет долю истинных положительных прогнозов от всех фактических положительных случаев (TP + FN). Отзыв является полезным показателем, когда целью является минимизация ложноотрицательных результатов, т. е. модель идентифицирует все положительные экземпляры в наборе данных.
  3. Оценка F1: это гармоническое среднее значение точности и полноты. F1-оценка является полезной метрикой, когда мы хотим сбалансировать важность точности и полноты, и нам нужна одна метрика для оценки производительности модели.
  4. ROC-AUC: он измеряет площадь под кривой рабочих характеристик приемника (ROC), на которой показана частота истинных положительных результатов (чувствительность) в сравнении с частотой ложных положительных результатов (1 — специфичность) для различных порогов классификации. ROC-AUC — полезная метрика, когда мы хотим оценить способность модели различать положительные и отрицательные классы по всем возможным пороговым значениям.

Короче говоря, выбор метрики оценки зависит от конкретной проблемы и целей модели. Рекомендуется получить комбинацию этих показателей, чтобы лучше понять производительность модели.

Анализ результатов

Предлагаемый алгоритм был оценен с использованием вышеупомянутых показателей производительности, таких как точность, полнота, оценка F1 и оценка ROC-AUC. Модель получила самый высокий балл F1 97,7%, а также балл ROC-AUC 85%, что указывает на то, что модель может легко различать два класса, и эту модель можно рекомендовать для развертывания в реальном мире.

Наконец, нам нужно сохранить модель в формате pickle.

Создайте приложение Streamlit

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

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

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

Наконец, чтобы иметь возможность запускать приложение локально, вам нужно инициировать следующую команду с вашего терминала:

Это запустит окно браузера, в котором вы сможете увидеть текущее приложение Streamlit.

Развертывание приложения Streamlit в облаке Streamlit

После загрузки приложения вы можете настроить параметры приложения в облаке Streamlit. Это включает в себя указание необходимых зависимостей, настройку переменных среды и настройку ресурсов приложения. Теперь мы готовы включить наше приложение и опробовать его возможности классификации. Вот как мы это сделаем:

Шаг 1. Создайте файл requeriments.txt в корне папки с библиотеками, которые мы использовали.

Шаг 2.Создайте новый репозиторий GitHub и поместите туда свой код.

Шаг 3.Создайте учетную запись Streamlit и подключите к ней свой профиль GitHub.

Шаг 4. Теперь на панели инструментов Streamlit нажмите кнопку «Новое приложение» и свяжите свое приложение Streamlit с репозиторием GitHub.

Шаг 5.Нажмите «Развернуть», и все готово!

Теперь вы можете поделиться своим новым приложением со всем миром!

Полный код вы можете найти в репозитории GitHub. Вот демонстрационное приложение, чтобы вы могли увидеть, как оно работает в режиме реального времени.

Счастливого обучения!!!