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

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

Результат алгоритма линейной регрессии можно записать как

где X — вход алгоритма, а 𝜃 — вектор постоянных параметров. Часть алгоритма «машинного обучения» настраивает 𝜃 так, чтобы

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

где

Функция потерь может быть записана в матрично-векторной форме как:

Оптимальные значения 𝜃 — это те, которые делают вывод алгоритма линейной регрессии таким же, как истинные данные. Другой способ сформулировать это так: оптимальные значения 𝜃 — это значения, минимизирующие функцию потерь. Таким образом, линейная регрессия становится простой задачей минимизации!

Минимизация функции потерь по параметрам 𝜃 дает:

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

Это все «машинное обучение», которое делает линейная регрессия, простая минимизация!

Код Python

Чтобы написать код Python с нуля, который выполняет линейную регрессию, нам просто нужно написать код, который находит оптимизированные значения 𝜃 с учетом матрицы X и вектора y, которые соответствуют входным данным и истинному набору данных. Написание такой функции будет выглядеть следующим образом: