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

Я предполагаю, что вы знакомы с языком программирования Python, так как я буду использовать его повсюду. И что у вас установлены и Python, и Jupyter Notebook. Вы также можете скачать набор данных здесь, если хотите кодировать вместе.

В конце этого урока вы должны знать, как:

  • Найдите линию наилучшего соответствия с помощью метода наименьших квадратов
  • Расчет и визуализация остатков/ошибок
  • Рассчитать RSS, чтобы найти общую ошибку линии регрессии

Фрейм данных об опоссумах состоит из девяти морфометрических измерений каждого из 104 горных опоссумов, отловленных в семи местах от Южной Виктории до центрального Квинсленда.

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

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

Это в основном суть того, что мы собираемся делать во всем этом разделе.

Импортировать библиотеки Python

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

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

Выше показан наш фрейм данных possum. Всего у нас 104 строки и 14 столбцов. Но пока нас интересуют только hdlngth и totlngth, которые представляют столбцы длины заголовка и общей длины соответственно. Мы будем использовать общую длину в качестве переменной predictor(x) и длину головы в качестве ответа(y).

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

Ниже мы наблюдаем, существует ли какая-либо связь между нашим предиктором и переменными ответа, используя график рассеяния.

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

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

Выше мы ввели простую формулу линейной регрессии:

Но чтобы найти линию наилучшего соответствия, нам нужно получить некоторые значения для нашего y-пересечения и градиента. Мы можем угадывать пересечение (a) и наклон (b), пока не получим линию, которая лучше всего соответствует нашим данным. Но это было бы трудоемко. Однако благодаря математическому методу наименьших квадратов нам не придется этого делать.

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

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

Получение a и b является задачей дифференциального исчисления. К счастью для нас, в этом руководстве нам не нужно ничего выводить по-разному, а сразу перейти к выведенным формулам:

где y_barи x_bar — средние значенияy и x в нашем наборе данных соответственно. Ниже приведена версия формулы в коде Python. С таким же успехом мы могли бы определить средние значения y и x и получить значения intercept(a) и slope(b).

Выше мы можем заметить, что наши bи aприбл. 0,57 и 42,71 соответственно. Теперь мы можем сгенерировать наши значения y для линии регрессии без необходимости гадать, используя функцию (gen_y), приведенную ниже, которая выведет сгенерированный список значений y с заданными значениями x и a и b, которые мы получили выше.

По сути, это формула линейной регрессии y=a+bxв коде Python. Теперь, когда мы сгенерировали наши значения y и сохранили их в списке (y_gen). Следующий шаг — визуализировать нашу линию на графике рассеяния, который мы видели ранее.

Помните, я говорил об остатках или ошибках? Теперь мы приступим к вычислению и сохранению наших ошибок в списке Python. Это поможет нам рассчитать Остаточную сумму квадратов (RSS). Ошибки рассчитываются путем вычитания наших значений y на линии регрессии (полученных из нашей функции gen_y) из истинных значений y (значений y из данных).

Рассчитываем ошибки по следующей формуле:

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

Распределение ошибок:

Теперь мы можем измерить общую ошибку линии регрессии с помощью остаточной суммы квадратов (RSS). RSS — это разница между значением y каждой точки данных на нашей оценочной линии и нашей диаграмме рассеяния, возводит разницу в квадрат и суммирует все различия. Это сумма квадратов всех ошибок. В нашем случае это ок. 687,04, что является лучшим RSS, который мы могли бы получить, не угадывая точку пересечения и наклон. Но с помощью метода наименьших квадратов.

Краткое резюме:

  • Мы нашли линию наилучшего соответствия с помощью метода наименьших квадратов
  • Рассчитанные и визуализированные остатки/ошибки
  • Расчет RSS для определения общей ошибки линии регрессии

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