Некоторое время назад я начал курс Coursera по прикладному машинному обучению. Чтобы помочь другим пройти курс и помочь себе лучше понять темы, я решил сделать короткие уроки в соответствии с учебным планом. Мои последние две статьи касались классификации KNN и линейной (полиномиальной) регрессии. Если интересно, не стесняйтесь взглянуть.





Сегодня я расскажу о методе под названием логистическая регрессия. Несмотря на то, что он называется «Регрессия», это метод классификации. Основное отличие от линейной регрессии заключается в выводе, где линейная регрессия дает непрерывное значение, а логистическая регрессия возвращает двоичную переменную. Проще говоря, это объясняет взаимосвязь между двухклассовой ценностью, то есть является ли животное Жирафом или нет.

Но об этом позже.

Структура статьи:

  • Введение
  • Загрузка и описание набора данных
  • Форматирование данных и определение модели
  • Визуализация результата
  • Вывод

Наслаждайтесь чтением! 🙂

Введение

Недавно я попробовал KNN и линейную регрессию на автомобильных данных. KNN помог нам классифицировать автомобили по классам, таким как «Компактный автомобиль» или «Большой автомобиль», с довольно удовлетворительными результатами. Допустим, кто-то хочет узнать вероятность того, что автомобиль будет переднеприводным. Здесь в игру вступает логистическая регрессия, поскольку она вычисляет оценку («шанс») объекта, являющегося целевым классом. то есть он может предсказать вероятность того, что автомобиль будет переднеприводным, в зависимости от расхода топлива, объема двигателя, количества цилиндров или любой другой соответствующей характеристики автомобиля.

Как работает логистическая регрессия?

Как и в линейной регрессии, у нас есть несколько входных переменных, X1, X2, X3. Линейная регрессия вычисляет вес каждой из этих переменных, добавляет смещение и возвращает метку (класс). Аналогично, в логистической регрессии рассчитываются веса для каждой входной переменной (X1, X2, X3), добавляется член смещения, а затем к входным данным применяется логистическая функция. Результаты. Затем функция возвращает значение от нуля (отрицательный класс) до единицы (положительный класс), которое описывает значение вероятности того, что входной объект принадлежит к положительному классу.

Давайте рассмотрим простой пример, согласно Википедии взрослый жираф имеет рост от 4,3 до 5,7 метра. Допустим, мы хотим знать, является ли животное жирафом или нет, поэтому мы измеряем рост животных и отображаем значения по оси X, а затем логистическая функция возвращает вероятность (ось Y) того, что животное является жирафом. Жирафа. Затем, если значение выше 0,5, животное прогнозируется как жираф, если ниже, модель предсказывает, что животное не является жирафом. Дополнительно к классификации мы получаем информацию о вероятности. Таким образом, животное ростом 4,8 метра с большей вероятностью является жирафом, чем животное ростом 2,7 метра.

Давайте скорее займемся практикой, ладно?

Загрузка и описание набора данных

Во-первых, мы импортируем зависимости, загрузим данные об экономии топлива автомобилей и посмотрим на фрейм данных. Чтобы использовать логистическую регрессию, нам нужно импортировать класс LogisticRegression из модуля модели Scikit-Learn.

Опять же, мы будем использовать набор данных автомобилей из Udacity. Он содержит технические характеристики от 3920 автомобилей с данными о количестве цилиндров, объеме двигателя (рабочем объеме), расходе топлива, выбросе CO2 и т. д., а также о приводе.

Наша цель сегодня состоит в том, чтобы разделить автомобили на два класса в зависимости от ведущих колес. В основном в нашей базе есть переднеприводные, заднеприводные и полноприводные автомобили. У каждого типа есть свои ПЛЮСЫ и ПРОТИВ, но это не тема здесь. 🙂

Мы хотим предсказать вероятность того, что автомобиль будет переднеприводным, в зависимости от рабочего объема [литров] и комбинированного расхода топлива [миль на галлон]. Для этого нам нужно управлять метками, где автомобили с передним приводом получат метку 1 (положительно), автомобили с задним и полным приводом — метку 0 (отрицательно).

Если мы построим рабочий объем и комбинированный расход топлива в виде парного графика, мы можем заметить закономерность, при которой автомобили с передним приводом (класс 1 — оранжевые точки) склонны сжигать меньше топлива (более высокое значение миль на галлон) и имеют меньший рабочий объем.

Также перед применением логистической регрессии к любым данным рекомендуется провести стандартизацию данных (Источник 1, Источник 2). По сути, он центрирует переменную вокруг нуля и устанавливает дисперсию равной единице, вычитая среднее значение из каждого измерения и разделив результат на стандартное отклонение. Мы запустим нашу модель со стандартизацией и без нее, просто чтобы посмотреть, будет ли это иметь какое-либо значение для этого конкретного набора данных.

Форматирование данных и определение модели

Сначала мы выбираем нужные столбцы из нашего набора данных.

Также при применении логистической регрессии к любым данным рекомендуется выполнять стандартизацию данных (Источник 1, Источник 2). По сути, он центрирует переменную вокруг нуля и устанавливает дисперсию равной единице, вычитая среднее значение из каждого измерения и разделив результат на стандартное отклонение. Мы запустим нашу модель со стандартизацией и без нее, просто чтобы посмотреть, будет ли это иметь какое-либо значение для этого конкретного набора данных.

Как провести стандартизацию?

В Scikit-learn для этого тоже есть класс, он называется StandardScaler. Давайте посмотрим на пример:

Теперь давайте сравним данные до и после стандартизации.

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

На следующем шаге мы хотим проверить, дает ли эта мера какие-либо преимущества или недостатки для нашей модели.

Определение модели

Мы можем применить модель. Как обычно в Scikit-learn, это очень простой процесс.

Отлично, модель готова, теперь давайте посмотрим на результаты!

Влияет ли стандартизация данных на точность модели?

Ну, наверное из-за большого набора данных, совсем нет. Посмотрим на результаты.

Вопреки нашим ожиданиям, результат обучения не изменился, а на тестовом наборе произошло незначительное снижение точности.

Эти цифры выглядят красиво, но, конечно, было бы лучше протестировать модель на реальном примере, не так ли?

Я протестировал модель на двух автомобилях: Ford Fiesta Sport 2016 года и BMW M5 2018 года. И для обеих машин прогноз модели верен.

Визуализация результата

Итак, мы спрашиваем себя, где проходит граница между кластерами данных? Что ж, давайте узнаем.

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

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

Перво-наперво, мы начнем с более простого подхода.

Мы извлекаем параметры, а затем вычисляем наклон и точку пересечения границы. По сути, мы вычисляем линию линейной регрессии, которая описывает взаимосвязь между нашим значением по оси X (смещение) и значением по оси Y (комбинированная экономия топлива).

Опять же, метка 1 представляет положительный класс (автомобили с передним приводом), а метка 0 представляет все остальные автомобили (отрицательный класс), в данном случае автомобили с задним и полным приводом.

Второй способ нанесения границы — использование контурного метода. Во-первых, определяется сетчатая сетка, где минимум и максимум определяются для обеих характеристик (рабочий объем и комбинированная экономия топлива). Numpy.c_ объединяет массив вдоль второй оси. И рассчитываются вероятности каждой точки сетки. Здесь важно понимать, что мы используем нашу модель logregздесь, целью которой является визуализация наклонаи перехват.

Далее нам нужно определить сюжет.

Чтобы отобразить граничную линию, мы отображаем только контурную линию, перехватывающую 50% вероятность того, что автомобиль будет переднеприводным. Прогнозируется, что все автомобили над линией будут переднеприводными (положительный класс 1), в то время как все автомобили под линией НЕ будут переднеприводными, поэтому они либо заднеприводные, либо все -колесный привод.

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

Вот код:

Я должен отметить, что здесь у нас есть 2 функции, а также у нас есть 2-мерный сюжет. Дополнительные функции добавили бы размерности сюжету.

Вывод

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

Граница принятия решения между двумя кластерами данных меток (автомобили с передним и не передним приводом) была рассчитана и нанесена на график с использованием двух методов. Кроме того, был добавлен график контурной карты вероятностей.

Надеюсь, вам понравилась моя статья. Если некоторые из представленных тем нуждаются в дополнительных пояснениях, не стесняйтесь обращаться ко мне в LinkedIn. 🙂

Также до следующего раза загляните в другие мои статьи. Ваше здоровье!