Создание многомерной регрессии с нуля с помощью PyTorch и визуализация прогнозов в 3D с помощью PCA

Готовы к глубокому погружению в захватывающую область интерпретации данных? 📊 Сегодня в меню многомерная регрессия. Звучит сложно? Что ж, к тому времени, когда мы закончим, это будет похоже на прогулку в парке 🌳🚶‍♂️

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

Пристегнитесь, потому что мы собираемся засучить рукава и погрузиться в реализацию многомерной линейной регрессии с нуля с помощью Pytorch 💪

Датасет: CarDekho

В этом исследовании мы будем использовать набор данных CarDekho, пытаясь предсказать цены на автомобили. Набор данных содержит следующие функции 🔬:

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

Каждый из этих факторов существенно влияет на цену автомобиля, и мы будем использовать эти данные для построения прогностической модели 🤖

Исследовательский анализ данных

Исследовательский анализ данных (EDA) — это важный предварительный шаг, который включает в себя обобщение основных характеристик набора данных с помощью визуальных методов или статистических сводок 📊

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

Сначала давайте импортируем необходимые пакеты:

Теперь давайте прочитаем данные в кадр данных Pandas. Вы можете скачать набор данных по этой ссылке Kaggle.

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

Индивидуальное распределение функций

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

Для этих гистограмм мы видим, что большинство автомобилей в продаже:

  • потребляет бензин вместо дизеля
  • был только один владелец
  • относятся к временному диапазону с 2012 г. по настоящее время
  • ручной
  • продается от 1 до 10 100 000 индийских рупий

Корреляция тепловой карты

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

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

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

<matplotlib.axes._subplots.AxesSubplot at 0x1f5bb762b08>

Корреляция между переменными и ценой продажи — самая полезная информация для нас, поскольку именно ее мы и хотим предсказать 🚗💵

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

Попарные графики

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

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

Здесь мы видим, что есть один из двух выбросов. Выброс — это точка данных, которая отклоняется или отличается от большинства других точек данных в наборе данных.

Характеристика года имеет полиномиальную корреляцию с ценой продажи, поэтому полиномиальная регрессия, скорее всего, превзойдет стандартную линейную регрессию.

Вместо этого текущая цена имеет линейную зависимость от текущей цены.

Обучение и тестирование моделей

Создать раздел обучающих данных

Разделение «обучение-проверка-тест» — это процесс разделения набора данных на три отдельных подмножества: обучающий набор, проверочный набор и тестовый набор.

Учебный набор используется для обучения модели, проверочный набор используется для настройки параметров модели и оценки производительности во время разработки, а тестовый набор используется для оценки производительности окончательной модели на невидимых данных.

Многомерная линейная регрессия

Хорошо, пришло время погрузиться в математику! 📐

Обучение линейной модели с использованием регрессии наименьших квадратов эквивалентно минимизации среднеквадратичной ошибки:

где n — количество выборок, y — прогнозируемое значение модели, а y — истинная цель.
Прогноз y получается путем умножения матрицы между входными данными X и весами модели w.

Минимизация Mse может быть достигнута путем решения градиента этого уравнения, равного нулю относительно весов w:

Для получения дополнительной информации о том, как найти w, перейдите по следующей ссылке.

Построение модели

Давайте построим модель с помощью Pytorch:

Время тренировать модель 🎉

Вычисление ошибок предсказания

Теперь давайте обработаем некоторые цифры и рассчитаем метрику для оценки производительности нашей модели.

MSE Train:	 2.808985471725464
MAE Train:	 1.1321566104888916

MSE Test:	 3.7205495834350586
MAE Test:	 1.2941011190414429

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

Единица продажной цены составляет 100 000 индийских рупий, что на момент написания статьи составляет 1 доллар США = 82,20 индийских рупий. Это означает, что в среднем модель имеет приблизительную ошибку 408 долларов США на тестовом наборе.

Анализ основных компонентов (PCA) и 3D-визуализация

В этом разделе мы будем использовать PCA, чтобы уменьшить количество признаков до двух, чтобы визуализировать плоскость линейного регрессора.

Предположим, имеется набор из m точек, таких как:

Анализ основных компонентов направлен на уменьшение размерности точек при наименьшей возможной потере точности.

Для каждой точки x^i в R^n мы найдем соответствующий кодовый вектор c^i в R^k. strong>, где k меньше, чем n.

Пустьf — функция кодирования, g — функция декодирования и D в R^{n,l} — матрица декодирования, столбцы которой ортонормированы:

Давайте спроецируем наши данные в 2D с помощью PCA:

Затем мы воссоздаем плоскость предсказания, используя три случайные точки предсказания. Подробнее здесь.

Хорошие новости ! Прогнозная плоскость довольно хорошо соответствует данным 😎

Заключение

Итак, вот итог: EDA помог нам понять некоторые тенденции в наших данных, и нам удалось построить довольно приличную модель линейной регрессии!

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

Не забудьте добавить линейную модель к базовому уровню для задач относительной регрессии, чтобы сравнить ее с более сложными моделями. Удачного изучения данных! 🚀📊