КОДЕКС

Понимание линейной регрессии

В этом блоге мы поймем, вероятно, самый простой алгоритм машинного обучения - линейную регрессию.

Вступление

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

Например,

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

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

Теперь, когда мы немного разогрелись, перейдем к сути дела.

Разъяснение основ: простая линейная регрессия

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

  • модель, содержащая только зависимую переменную
  • модель, содержащая как независимую, так и зависимую переменную

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

Но как мы вообще можем сравнить две модели?

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

Итак, для сравнения мы проделаем следующие шаги для обеих моделей:

  • Сначала мы найдем остатки между исходными значениями и значениями, предсказанными нашей линией регрессии.
  • Мы возведем в квадрат все эти остатки и сложим их.

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

Помимо SSE, у нас также есть SSR и SST.

SST - это «сумма квадратов», учитывающая все ошибки, известные или неизвестные. Это сумма квадратов разностей между зависимой переменной, предсказанной на основе нашей линии регрессии, и средним значением зависимой переменной.

SSR - это «регрессия суммы квадратов», которая учитывает все известные причины ошибок и описывает, как наша линия «вписывается» в наш набор данных. Это сумма квадратов разностей между значениями зависимой переменной и средним значением зависимой переменной.

Эти 3 термина имеют следующие отношения:

SST = SSE + SSR

Примечание. Для нашей модели с единственной зависимой переменной SSE = SST

Значение R-квадрата (коэффициент детерминации): это значение используется для оценки того, насколько наша линия регрессии соответствует нашему набору данных. Это обнаруживается выражением,

R² = 1- (SSE / SST) = SSR / SST

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

Фрагмент кода:

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

Поскольку это «линейная» регрессия, наша линия регрессии будет иметь вид:

y = b₀+ b₁*x

Для множественной линейной регрессии наша линия будет иметь вид:

y = b₀+ b₁*x₁+ b₂*x₂ + …. + bₙ*xₙ

куда,

  • y - наша зависимая (ответ / результат) переменная
  • b₁, b₂,…, bₙ - параметры, а b₀ - наша точка пересечения.
  • x₁, x₂,…, xₙ - независимые переменные

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

  1. Метод наименьших квадратов
  2. Градиентный спуск

Метод наименьших квадратов

Шаги для этого приведены ниже:

  1. Найдите среднее значение для зависимых и независимых переменных. Назовем это yₘₑₐₙ и xₘₑₐₙ.
  2. Для каждого значения x вычтите из них xₘₑₐₙ, а для каждого значения y вычтите из них yₘₑₐₙ.
  3. Найдите продукт для каждого (xᵢ-xₘₑₐₙ) и (yᵢ-yₘₑₐₙ), где 1≤i≤n, а n - номер. значений переменных. Затем добавьте эти продукты.
  4. Затем возведите в квадрат (xᵢ-xₘₑₐₙ) и сложите их вместе.
  5. Разделите результат (3) на результат (4), и вы получите наклон линии регрессии.
  6. Чтобы найти точку пересечения, мы решаем b₀ = y - b₁ * x, заменяя y на yₘₑₐₙ и x на xₘₑₐₙ.

Обратите внимание, что в основном мы находим уклон следующим образом:

наклон линии регрессии ( y = b₀ + b₁ * x)

= [Σ ковариация (xi, yi) / дисперсия (x)] для 1≤i≤n

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

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

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

Этот метод включает в себя нахождение частной производной первого порядка нашей функции затрат по наклону m и точке пересечения b. Но зачем нам его искать?

На картинке выше у нас есть кривая затрат. Предположим, что у нас есть наклон m по оси x. Чтобы найти глобальный минимум (где наша функция стоимости минимальна), мы продолжаем постепенно снижаться с переменным коэффициентом. Обратите внимание, что глобальный (или даже локальный) минимум - это точка, в которой наклон кривой затрат равен 0. Это точка схождения. Эту точку можно найти через частную производную по m. Точно так же для точки пересечения b мы можем найти частную производную по t b.

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

Расчеты приведены ниже:

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

  1. Найдите частную производную функции стоимости J (b, m) по m и b.
  2. Уменьшите m и b на произведение скорости обучения (α) и их соответствующих частных производных.
  3. Мы выполняем шаги (1) и (2) для указанного количества итераций (эпох), пока не достигнем сходимости.
  4. Отрегулируйте значения α и эпохи, пока не достигнете сходимости.

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

Мультиколлинеарность с несколькими предикторами:

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

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

Использование тепловой карты дает вам хорошее наглядное представление для этого.

Фрагмент кода:

куда,

  • стоимость: список, в котором хранятся все значения стоимости на каждой итерации; используется позже для построения графика зависимости стоимости от количества. итераций (или эпохи).
  • min_cost: инициализирован значением None, он проверяет минимальные значения во время итераций.
  • b_min: используется для хранения параметров значения min_cost во время итераций.
  • h: значение гипотезы, полученное путем выполнения значений x со значениями параметров.
  • b: массив параметров, инициализированный единицами.

Примечание: использование np.sum () увеличивает скорость вычисления кода и действительно использует масштабирование функций в вашем наборе данных, чтобы привести значения всех предикторов в один и тот же диапазон, таким образом мы действительно увидим, как предиктор «способствует» нашей переменной ответа.

Фрагмент кода для построения графика:

Вывод:

На сегодня все, спасибо, что уделили время, чтобы это прочитать !!!