Линейная регрессия: подгонка прямой линии к набору наблюдений.

Вот и все.

Это простейшая форма регрессионного анализа.

Пример

Есть группа людей, которых я измерил, и 2 характеристики, которые я измерил у этих людей, - это их вес и их высокий уровень.

Убрать вес по оси X и верхний уровень по оси Y.

Отображение точек веса людей относительно их роста. И я вижу, что существует линейная связь.

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

Вы создаете линию для прогнозирования новых значений на основе прошлых наблюдений в обратном направлении.

Почему это называется регрессией?

Так что в регрессионном анализе нет ничего особенно «регрессивного». Это было просто неправильное понимание Фрэнсиса Гальтона. Для дальнейшего интересного заговора прочтите о его происхождении:

https://blog.minitab.com/en/statistics-and-quality-data-analysis/so-why-is-it-called-regression-anyway.

Как работает линейная регрессия?

Внутри него используется метод под названием наименьших квадратов.

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

Наклон просто оказывается корреляцией между двумя переменными, умноженной на стандартное отклонение по y, деленное на стандартное отклонение по x.

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

Если вы слышите, как кто-то говорит об оценке максимальной вероятности, на самом деле они говорят о регрессии.

Типы линейной регрессии

  1. Простая линейная регрессия: поиск взаимосвязи между отдельной независимой переменной (вход) и соответствующей зависимой переменной (выход).
  2. Множественная линейная регрессия: обнаружение связи между 2 или более независимыми переменными (входными данными) и соответствующей зависимой переменной (выходными).

Измерение эффективности с помощью R-Squared

А r-квадрат также известен как коэффициент детерминации. Это доля от общей вариации y, которая фиксируется вашей моделью.

Способ интерпретации r-квадрат: вы получите значение в диапазоне от 0 до 1.

  • 0 (ноль) означает, что у вас плохая подгонка, он не учитывает расхождения в ваших данных.
  • 1 (One) идеально подходит, поэтому все отклонения в ваших данных отражаются в этой строке.

Таким образом, низкое значение r-квадрата означает, что оно плохо подходит; высокое значение в квадрате означает, что он подходит.

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

«Градиент измеряет, насколько изменится вывод функции, если вы немного измените входные данные». - Лекс Фридман (Массачусетский технологический институт)

Практический пример Python по линейной регрессии

Давайте возьмем пример некоторых данных, которые показывают примерно линейную зависимость между скоростью страницы и суммой покупки:

%matplotlib inline
import numpy as np
from pylab import *
pageSpeeds = np.random.normal(3.0, 1.0, 1000)
purchaseAmount = 100 - (pageSpeeds + np.random.normal(0, 0.1, 1000)) * 3
scatter(pageSpeeds, purchaseAmount)

Вывод:

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

Поскольку у нас всего две функции, мы можем сохранить простоту и просто использовать scipy.state.linregress:

from scipy import stats
slope, intercept, r_value, p_value, std_err = stats.linregress(pageSpeeds, purchaseAmount)

Неудивительно, что наше значение R-квадрата действительно хорошо подходит:

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

import matplotlib.pyplot as plt
def predict(x):
    return slope * x + intercept
fitLine = predict(pageSpeeds)
plt.scatter(pageSpeeds, purchaseAmount)
plt.plot(pageSpeeds, fitLine, c='r')
plt.show()

Вывод:

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

Будьте в безопасности и желаю удачного обучения!