Линейная регрессия - это подход к моделированию взаимосвязи между одной зависимой переменной (целевая переменная) и одной (простая регрессия) или несколькими (множественная регрессия) независимыми переменными . Модель линейной регрессии предполагает линейную зависимость между входными и выходными переменными. Если эта взаимосвязь присутствует, мы можем оценить коэффициенты, необходимые модели для прогнозирования новых данных.

В этой статье вы узнаете, как визуализировать и реализовать алгоритм линейной регрессии с нуля в Python с использованием нескольких библиотек, таких как Pandas, Numpy, Scikit-Learn, и Scipy. Кроме того, мы будем измерять направление и силу линейной связи между двумя переменными с помощью коэффициента корреляции Пирсона, а также прогнозирующую точность модели линейной регрессии с использованием таких показателей оценки, как как среднеквадратичная ошибка.

Теперь! Приступим 💜

Анализ набора данных

Набор данных, используемый в этой статье, был получен в Kaggle. Kaggle - это онлайн-сообщество специалистов по обработке данных и специалистов по машинному обучению, где можно найти самые разные наборы данных. Выбранный набор данных содержит рост и вес 5000 мужчин и 5000 женщин, и его можно загрузить по следующей ссылке:



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

Как мы можем легко заметить, фрейм данных содержит три столбца: пол, рост и вес. Столбец «Пол» содержит два уникальных значения типа объекта: мужской или женский. В столбцах Высота и Вес используется тип данных с плавающей запятой. Поскольку фрейм данных не содержит значений NULL и типы данных являются ожидаемыми, нет необходимости очищать данные.

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

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

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

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

Но, может быть, здесь вы спросите себя: существует ли связь между ростом и весом? Могу ли я использовать рост человека, чтобы предсказать его вес?

Ответ на оба вопроса - ДА! 😃 💪 Продолжаем ▶ ️ ▶ ️

Диаграммы разброса с Matplotlib и линейная регрессия с Numpy

Диаграмма рассеяния - это двухмерная визуализация данных, которая показывает взаимосвязь между двумя числовыми переменными: одна отображается по оси x, а другая - по оси y. Matplotlib - это библиотека для построения 2D-графиков Python, которая содержит встроенную функцию для создания графиков разброса - функцию matplotlib.pyplot.scatter ().

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

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

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

y =a+bx

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

ошибка = y (действительный) -y (прогнозируемый) = y (действительный) - (a + bx)

Мы можем легко получить эту строку с помощью Numpy. Numpy - это пакет Python для научных вычислений, который предоставляет высокопроизводительные объекты многомерных массивов. Функция numpy polyfit numpy.polyfit (x, y, deg) соответствует многочлену степени deg точкам (x, y), возврат полиномиальных коэффициентов, которые минимизируют квадратную ошибку. В следующих строках кода мы получаем многочлены для прогнозирования веса для женщин и мужчин.

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

Диаграммы разброса и линия линейной регрессии с данными seaborn

Seaborn - библиотека визуализации данных Python, основанная на matplotlib. Мы можем легко создать графики регрессии с помощью seaborn, используя функцию seaborn.regplot. Количество необходимых строк намного меньше по сравнению с предыдущим подходом.

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

Подбор простой линейной модели с помощью sklearn

Scikit-learn - бесплатная библиотека машинного обучения для Python. Мы можем легко реализовать линейную регрессию с помощью Scikit-learn, используя класс LinearRegression. После создания объекта линейной регрессии мы можем получить строку, которая лучше всего соответствует нашим данным, вызвав метод fit.

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

После того, как мы подобрали модель, мы можем делать прогнозы, используя метод прогнозирования. Мы также можем делать прогнозы с помощью полинома, вычисленного в Numpy, используя функцию polyval. Прогнозы, полученные с помощью Scikit Learn и Numpy, одинаковы, поскольку оба метода используют один и тот же подход для вычисления линии подбора.

Коэффициент корреляции Пирсона

Корреляция измеряет степень связи двух переменных. Коэффициент корреляции Пирсона используется для измерения силы и направления линейной связи между двумя переменными. Этот коэффициент рассчитывается путем деления ковариации переменных на произведение их стандартных отклонений, и имеет значение от +1. и -1, где 1 - идеальная положительная линейная корреляция, 0 - отсутствие линейной корреляции и -1 - полная отрицательная линейная корреляция.

Мы можем получить коэффициенты корреляции переменных кадра данных с помощью метода .corr (). По умолчанию рассчитывается коэффициент корреляции Пирсона; однако могут быть вычислены другие коэффициенты корреляции, например, Кендалла или Спирмена.

Эмпирическое правило для интерпретации величины коэффициента корреляции следующее:

  • 1–0,8 → очень сильный
  • 0,799–0,6 → сильная
  • 0,599–0,4 → умеренный
  • 0,399–0,2 → слабый
  • 0,199–0 → очень слабое

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

Мы также можем рассчитать коэффициент корреляции Пирсона с помощью пакета stats программы Scipy. Функция scipy.stats.pearsonr (x, y) возвращает два значения: коэффициент корреляции Пирсона и p-значение.

Как можно заметить, коэффициенты корреляции при использовании Pandas и Scipy одинаковы:

  • Коэффициент корреляции самок: 0,849608
  • Коэффициент корреляции мужчин: 0,8629788

Остаточные участки

Мы можем использовать числовые значения, такие как коэффициент корреляции Пирсона, или инструменты визуализации, такие как диаграмма рассеяния, чтобы оценить, подходит ли линейная регрессия для прогнозирования данных. Другой способ выполнить эту оценку - использовать графики остатков. Остаточные графики показывают разницу между фактическими и прогнозируемыми значениями. Если точки на остаточном графике случайным образом рассредоточены вокруг горизонтальной оси, для данных подходит модель линейной регрессии; в противном случае более подходящей является нелинейная модель.

Мы можем использовать Seaborn для создания остаточных графиков следующим образом:

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

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

Простая линейная регрессия использует линейную функцию для прогнозирования значения целевой переменной y, содержащую функцию только одной независимой переменной x₁.

y =b ₀+b ₁x ₁

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

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

  • Кобели → Вес = -224,50 + 5,96 * Рост
  • Самки → Вес = -246,01 + 5,99 * Рост

До сих пор мы использовали одну независимую переменную для прогнозирования веса человека Weight = f (Рост), создав две разные модели. Может быть, вы думаете: 💭 ❓ Можем ли мы создать модель, которая прогнозирует вес, используя рост и пол в качестве независимых переменных? Ответ ДА! 😄 ⭐️ И здесь в игру вступает множественная линейная регрессия!

Множественная линейная регрессия использует линейную функцию для прогнозирования значения целевой переменной y, содержащей функцию n независимой переменной x = [ x₁, x₂, x₃,…, xₙ].

y =b ₀+b ₁x ₁+b₂x₂+b₃x₃+…+bx

Мы получаем значения параметров bᵢ, используя тот же метод, что и в простой линейной регрессии (наименьшая квадратичная ошибка). После подбора модели мы можем использовать уравнение для прогнозирования значения целевой переменной y. В нашем случае мы используем рост и пол для прогнозирования веса человека Weight = f (рост, пол).

Категориальные переменные в множественной линейной регрессии

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

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

Множественная линейная регрессия принимает не только числовые, но и категориальные переменные. Чтобы включить категориальную переменную в регрессионную модель, переменная должна быть закодирована как двоичная переменная (фиктивная переменная). В Pandas мы можем легко преобразовать категориальную переменную в фиктивную переменную с помощью функции pandas.get_dummies. . Эта функция возвращает фиктивные данные, где 1 представляет наличие категориальной переменной, а 0 - ее отсутствие.

Чтобы избежать мультиколлинеарности, мы должны отбросить один из фиктивных столбцов.

Затем мы можем использовать этот фрейм данных для получения модели множественной линейной регрессии с помощью Scikit-learn.

После аппроксимации линейного уравнения мы получаем следующую модель множественной линейной регрессии:

  • Вес = -244,9235 + 5,9769 * Рост + 19,3777 * Пол

Если мы хотим предсказать вес мужчины, значение пола равно 1, что дает следующее уравнение:

  • Мужчина → Вес = -244,9235 + 5,9769 * Рост + 19,3777 * 1 = -225,5458 + 5,9769 * Рост

Для женщин пол имеет значение 0.

  • Женщина → Вес = -244,9235 + 5,9769 * Рост + 19,3777 * 0 = -244,9235 + 5,9769 * Рост

Если мы сравним простые линейные модели с множественной линейной моделью, мы можем наблюдать аналогичные результаты прогнозов. Гендерная переменная модели множественной линейной регрессии изменяет только точку пересечения линии. 🙌

Ключевые выводы

  1. Простая линейная регрессия - это линейный подход к моделированию отношений между зависимой переменной и одной независимой переменной.
  2. Множественная линейная регрессия использует линейную функцию для прогнозирования значения зависимой переменной, содержащей функцию n независимых переменных.
  3. Исследовательский анализ данных состоит из анализа основных характеристик набора данных, обычно с помощью методов визуализации и сводной статистики.
  4. Гистограммы - это графики, которые показывают распределение числовой переменной с группировкой данных в интервалы.
  5. Pandas предоставляет методы и функции для исследовательского анализа данных, такие как Dataframe.describe (), Dataframe.info (), Dataframe.dtypes и Dataframe.shape.
  6. Точечные диаграммы - это двухмерная визуализация данных, показывающая взаимосвязь между двумя числовыми переменными: одна отображается по оси x, а другая - по оси y. Matplotlib и Seaborn предоставляют встроенные функции для построения диаграмм рассеяния.
  7. Мы можем подогнать простую модель линейной регрессии с помощью таких библиотек, как Numpy или Scikit-learn.
  8. Корреляция измеряет степень связи двух переменных. Коэффициент корреляции Пирсона используется для измерения силы и направления линейной связи между двумя переменными.
  9. Графики остатков можно использовать для анализа того, подходит ли модель линейной регрессии для данных.
  10. Категориальные переменные необходимо преобразовать в фиктивные переменные, чтобы использовать их в моделях множественной линейной регрессии.

Спасибо за чтение 🙌 😍 😉 🍀