Множественная линейная регрессия с нуля с использованием Python

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

Множественная линейная регрессия

В простой линейной регрессии мы хотим предсказать зависимую переменную «y», используя только одну независимую переменную «x», как в приведенном ниже уравнении.

y= ax + b

«Y» - это зависимая переменная, «x» - это независимая переменная, «a» - это наклон линии, «b» - это переменная пересечения, другими словами, значение «y», когда «x» равно нулю. В линейной регрессии мы хотим найти значения «a» и «b», которые минимизируют ошибки прогнозирования.

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

Где для i = n наблюдений:

  • Y = зависимая переменная.
  • Xs = независимые переменные.
  • ß 0 = точка пересечения по оси Y (постоянный член).
  • Остальные ß a - коэффициенты наклона для каждой независимой переменной.
  • ß также называют весами.

Если вы обратите внимание, линейная регрессия - это простая версия множественной регрессии, где все члены ß от ß2 до ßp равны нулю.

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

Но как я могу узнать, каковы лучшие значения бета-версий?

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

Из моего предыдущего поста вы знаете, что функция стоимости - это функция, указанная ниже.

И наша цель состояла в том, чтобы найти значения «a» и «b», которые минимизируют значение функции затрат. Производные от простой линейной регрессии, где:

Для множественной линейной регрессии процесс тот же, но теперь мы добавляем X 0 = 1 в уравнение, чтобы мы могли обобщить производную функции стоимости. Таким образом, формула множественной линейной регрессии стала:

Производная этой функции равна

Чтобы обновить веса, нам просто нужно умножить производную на скорость обучения и вычесть из предыдущих весов.

Важно, чтобы мы одновременно обновляли все ß.

Это итеративный процесс, можем ли мы сделать его более эффективным с помощью матриц?

Векторизованная множественная линейная регрессия

В Python мы можем использовать векторизацию для реализации множественной линейной регрессии и градиентного спуска. Мы можем преобразовать ys, ßs и Xs в матрицы, как на изображении ниже.

С этим изображением мы можем получить предсказанный y, используя формулу ниже:

Производная по следующей формуле:

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

Напишем код

Первый совет для людей, которые изучают Data Science, но не имеют опыта разработки программного обеспечения. Всегда документируйте свой код.

Итак, мы начинаем с функции fit_linear_regression, которая будет получать X, Y, скорость обучения и эпсилон. Эпсилон работает как порог, мы остановимся, когда ошибка будет меньше эпсилон.

  • На шаге 1 мы вставляем столбец, содержащий 1, в качестве точки пересечения оси y в массив x NumPy.
  • На шаге 2 мы инициализируем ßs, здесь я вызываю веса. Веса будут массивом NumPy, содержащим количество переменных в X.
  • На шаге 3 мы будем обновлять веса до тех пор, пока норма частной производной не станет меньше эпсилон.
  • На шаге 3.1 мы получаем предсказанные значения, как на рисунке 9, и частную производную, как на рисунке 10.
  • На шаге 3.2 мы получаем норму.
  • На шаге 3.3 мы обновляем веса, как на рисунке 11.
  • Символ if в строках 41 и 42 предупреждает нас, когда мы устанавливаем высокую скорость обучения и функции расходятся.
  • Возвращение функции - скорректированные веса.

Теперь, когда у нас есть правильные веса, как мы прогнозируем значения?

Делать прогнозы

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

Теперь мы реализовали нашу множественную линейную регрессию с нуля, но как ее сравнить со склеарном?

Сравнение со sklearn

Первая - это Среднеквадратичная ошибка из модели sklearn, а вторая - MSE из нашей функции.

Как мы могли видеть, они похожи. Наша функция MSE всего на 0,004 больше, чем sklearn.

Выводы

В этом посте вы узнали

  1. Что такое множественная линейная регрессия.
  2. Как мы можем соответствовать модели множественной линейной регрессии.
  3. Формула векторизованной множественной линейной регрессии.
  4. Как реализовать собственную множественную линейную регрессию, используя только Python и NumPy.

Вы можете увидеть код, использованный для написания этого поста, в блокноте Colab.

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