Линейная регрессия — один из наиболее часто используемых алгоритмов, когда кто-то хочет узнать о машинном обучении. Python предоставляет удобную библиотеку для реализации линейной регрессии, такую ​​как Scikit-learn. Однако было бы хорошо, если бы мы пытались реализовать линейную регрессию с нуля, чтобы получить глубокое понимание того, как она работает.

В этой истории мы немного углубимся в линейную регрессию с оптимизацией градиентного спуска с нуля в Python.

Линейная регрессия

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

В математической форме это можно обозначить как:

где X — независимые переменные, а Y — зависимая переменная. Мы видим, что уравнение представляет собой уравнение прямой линии. Да, наша цель — найти наиболее подходящую линию для данных. Но как узнать, подходит ли линия для данных лучше всего?

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

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

«Цель знания — действие, а не знание». — Аристотель

Реализация

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

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

Приведенная выше функция — это всего лишь кодовая версия уравнения, которое мы обсуждали ранее. Функция принимает некоторые параметры: X как независимую переменную, Y как зависимую переменную, а также скорость обучения и итерацию. для градиентного спуска. Другими словами, скорость обучения указывает, насколько мы хотим обновить градиентный спуск по отношению к функции стоимости. Чем больше скорость обучения, тем больше шагов для каждой итерации (изображение 2).

В этом эксперименте мы будем использовать скорость обучения = 0,1 и итерации = 100. Обучение модели выполняется с использованием приведенного ниже кода. Мы также можем построить кривую потерь нашей модели, используя последние две строки кода.

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

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

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

количественно определяет степень вариации зависимой переменной, зафиксированной моделью. R² получает значения, вычисляя сумму квадратов всех неправильных прогнозов, деленную на сумму квадратов среднего значения целевой переменной. Если наше значение R² близко к 1, наша модель делает точные прогнозы. Для этих двух оценок мы импортируем функцию из scikit-learn.

Мы получили результаты MAEad для наших тестовых данных: 1,2315 и 0,8747 соответственно. При использовании скорости обучения = 0,1 и итерации = 100 это дает хорошие результаты. Тем не менее, мы можем играть больше, настроив их.

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

Весь код доступен на моем GitHub.