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

Зависимая и независимая переменная

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

Независимые переменные (также называемые объясняющими/прогностическими переменными) представляют количество, которым манипулируют в эксперименте.

Проще говоря, зависимая переменная изменяется в ответ на независимую переменную.

Пример: Предположим, что оценки студента зависят от количества часов, которые он/она изучает (обратите внимание, что это может быть не всегда так). Итак, здесь независимой переменной будут отметки, а зависимой переменной — часы. Здесь вы можете контролировать часы и подсчитывать оценки.

Контролируемое обучение

Постановка задачи обучения с учителем: при заданном обучающем наборе наша цель состоит в том, чтобы изучить функцию h : X -> Y, чтобы h(x) был «хорошим» предиктором для соответствующего значения y. По историческим причинам эта функция h(⋅) называется гипотезой.

Обозначение

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

Линейная регрессия — это линейная модель, которая отображает линейную связь между независимыми переменными (входными признаками) (x) и зависимой переменной (y). Цель модели линейной регрессии — найти «линию наилучшего соответствия». Возможно, вам знакомо уравнение прямой линии: y=mx+c. Модель линейной регрессии также представляется аналогичным образом в виде уравнения прямой. Мы аппроксимируем y как линейную функцию от x.

Существует два типа линейной регрессии:
1. Простая линейная регрессия
2. Множественная линейная регрессия.

Простая линейная регрессия

Простая линейная регрессия — это очень прямолинейный и простой подход к прогнозированию количественного отклика Y на основе одной характеристической переменной X. Математически мы можем записать эту простую модель линейной регрессии как

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

Множественная или многомерная линейная регрессия — это подход к прогнозированию количественного ответа Y на основе двух или более независимых переменных.

Параметры обучения

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

Для простоты использования мы можем опустить нижний индекс θ в h_θ(x) и записать его проще как h(x). Чтобы упростить наши обозначения, мы также вводим соглашение о том, что x₀=1 (это термин перехвата), так что,

где в правой части выше мы рассматриваем θ и x как векторы. n — количество входных переменных (не считая x₀)
Прогнозирование будущих значений выполняется путем подстановки значений наших функций xᵢ в наше уравнение.

Как это работает?

Давайте лучше разберемся в линейной регрессии, работая с набором данных о жилье Эймса. Здесь я использую только 100 обучающих примеров и две колонки. Цель состоит в том, чтобы спрогнозировать цену продажи дома с одной характеристикой GrLivArea (жилая площадь над землей в квадратных футах).

df = pd.read_csv('/content/Ames_housing.csv', usecols = ['GrLivArea','SalePrice'], nrows = 100)
df.head()

У нас есть данные.
Прежде чем делать прогнозы, нам сначала нужно подогнать модель. Очень простая модель состоит в том, чтобы предсказать цену продажи как среднюю цену дома в нашем наборе данных без учета квадратных футов жилой площади.
Возьмем SalePrice = 230 000 для каждого значения GrLivArea. Теперь постройте данные и результирующую линию.

plt.scatter(y=df["SalePrice"], x=df["GrLivArea"], c="k")
 
plt.axhline(y=230000, color='m', linestyle='-')
plt.xlabel("GrLivArea(sqft))")
plt.ylabel("Sale Price")
plt.show()

Похоже неудачная модель. Модель плохо соответствует данным. Как узнать, хорошо ли модель соответствует данным?
Давайте посмотрим -› Здесь большинство точек данных находятся вдали от линии, из-за чего линия плохо подходит. Нам нужно сделать h(x) близким к y для имеющихся у нас обучающих примеров.

Функция стоимости

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

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

Поиск лучших параметров

Алгоритм СУО

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

Это обновление выполняется одновременно для всех значений j=0,…,n. Здесь αα называется скоростью обучения. Этот алгоритм будет многократно делать шаг в направлении наибольшего убывания J(θ).

Чтобы реализовать этот алгоритм, мы сначала должны вычислить член частной производной на правой стороне. Сначала рассмотрим только один обучающий пример (x,y), чтобы можно было пренебречь суммой в определении J(θ)

Для одного обучающего примера правило обновления принимает следующий вид:

Это называется правилом обновления LMS (наименьших средних квадратов), а также правилом обучения Уидроу-Хоффа.

Выведенное нами правило LMS было только для одного обучающего примера. Мы можем изменить это, чтобы приспособить тренировочный набор из более чем одного примера. Это можно сделать разными способами.
1. Пакетный градиентный спуск
2. Стохастический градиентный спуск.

Пакетный градиентный спуск

Алгоритм пакетного градиентного спуска:

Пакетный градиентный спуск рассматривает каждый пример во всем обучающем наборе на каждом этапе. Итак, всего за одно обновление алгоритм должен вычислить градиент для всех обучающих примеров. Это проблематично, когда у нас есть большой объем данных, поскольку это может быть очень медленным и дорогостоящим в вычислительном отношении. Пакетный градиентный спуск гарантированно сходится к глобальному минимуму для выпуклых функций. Здесь наша функция стоимости J(θ) является выпуклой квадратичной функцией, поэтому она действительно будет сходиться к глобальным минимумам.

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

Стохастический градиентный спуск

Алгоритм стохастического градиентного спуска (SGD)

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

В стохастическом градиентном спуске параметры обновляются после прохождения каждого обучающего примера. То есть каждый раз, когда мы сталкиваемся с обучающим примером, мы обновляем параметры в соответствии с градиентом ошибки только в отношении этого обучающего примера. Часто SGD приближает θ к минимуму намного быстрее, чем пакетный градиентный спуск. Обратите внимание, что SGD может никогда не приблизиться к минимуму, поскольку он выполняет частые обновления, что приводит к сильным колебаниям вокруг минимума J(θ). На практике большинство значений вблизи минимума будут достаточно хорошим приближением к истинным минимумам. Медленно позволяя скорости обучения αα уменьшаться до нуля по мере работы алгоритма, также можно гарантировать, что параметры будут сходиться к глобальному минимуму, а не просто колебаться вокруг минимума.

Нормальное уравнение

Нормальное уравнение – это аналитическое решение задачи линейной регрессии с функцией стоимости наименьших квадратов. Чтобы найти нормальное уравнение, мы минимизируем J(θ), явно взяв его производные по θⱼ и установив их равными нулю.

Значение θ, которое минимизирует J(θ), задается в замкнутой форме уравнением

Вы можете найти производное здесь.

Ссылки:

cs229 notes
Введение в статистическое обучение