Изучите основные концепции машинного обучения при построении модели линейной регрессии на Python.

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

Есть два распространенных способа сделать линейную регрессию в Python - использовать библиотеки statsmodel и sklearn. Оба варианта являются отличными и имеют свои плюсы и минусы.

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

Table of Contents
1. What is Linear Regression?
2. Linear Regression in Python
 - The Data
3. Linear Regression with Statsmodels
 - Simple Linear Regression
 - Multiple Linear Regression
4. Linear Regression with sklearn
5. Python for Data Science Cheat Sheet (Free PDF)

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

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

Вот уравнение линейной регрессии:

где y - зависимая переменная (целевое значение), x1, x2, … xn независимая переменная (предикторы), b0 точка пересечения, b1, b2, ... bn коэффициенты и n количество наблюдений.

Если уравнение неясно, может помочь изображение ниже.

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

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

Хватит теории! Давайте узнаем, как сделать линейную регрессию в Python.

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

Есть разные способы сделать линейную регрессию в Python. Два самых популярных варианта - это библиотеки statsmodels и scikit-learn.

Во-первых, давайте посмотрим на данные, которые мы собираемся использовать для создания линейной модели.

Данные

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

Вы можете скачать этот набор данных на моем Github или на Google Drive. Обязательно оставьте этот CSV-файл в том же каталоге, где находится ваш скрипт Python.

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

import pandas as pd
df_boston = pd.read_csv('Boston House Prices.csv')
df_boston

Есть 3 столбца. Столбец «Value» содержит медианное значение домов, занимаемых владельцем, в 1000 долларов США (это то, что мы хотим предсказать, то есть наше целевое значение). Столбцы «Комнаты» и «Расстояние» содержат среднее количество комнат на жилище и взвешенные расстояния до пяти бостонских центров занятости (оба являются предикторами).

Подводя итог, мы хотим спрогнозировать стоимость дома на основе количества комнат в доме и его расстояния до центров занятости.

Линейная регрессия со статистическими моделями

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

Если вы установили Python через Anaconda, у вас уже установлены statsmodels. Если нет, вы можете установить его с помощью conda или pip.

# pip
pip install statsmodels
# conda
conda install -c conda-forge statsmodels

После того, как вы установили statsmodel, импортируйте его со следующей строкой кода.

import statsmodels.api as sm

Первое, что нужно сделать перед созданием линейной регрессии, - это определить зависимые и независимые переменные. Мы уже обсуждали их в предыдущем разделе. Зависимая переменная - это значение, которое мы хотим спрогнозировать, также известное как целевое значение. С другой стороны, независимая (ые) переменная (ы) является предиктором.

В нашем наборе данных есть 2 предиктора, поэтому мы можем использовать любой или оба из них.

Начнем с простой линейной регрессии. Простая линейная регрессия оценивает взаимосвязь между одной независимой переменной и одной зависимой переменной.

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

В этом примере я выберу «Комнаты» в качестве предиктора / независимой переменной.

  • Зависимая переменная: «Значение»
  • Независимая переменная: «Комнаты».

Давайте также определим зависимые и независимые переменные в нашем коде.

y = df_boston['Value'] # dependent variable
x = df_boston['Rooms'] # independent variable

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

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

𝑦 = 𝑎𝑥 + 𝑏

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

Теперь давайте подберем модель, используя statsmodels. Сначала мы добавляем константу перед подгонкой модели (sklearn добавляет ее по умолчанию), а затем подбираем модель с помощью метода .fit ().

x = sm.add_constant(x1) # adding a constant
lm = sm.OLS(y,x).fit() # fitting the model

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

>>> lm.predict(x)
0      25.232623
1      24.305975
2      31.030253
3      29.919727
4      31.231138
         ...    
501    24.603318
502    20.346831
503    27.822178
504    26.328552
505    19.661029

Приведенный выше код предсказывает домашние значения (вывод на печать) на основе данных в столбце «Комната».

Таблица регрессии

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

Чтобы получить таблицу регрессии, запустите приведенный ниже код:

lm.summary()

Вы получите эту таблицу:

Таблица называется «Результаты регрессии OLS». OLS означает обыкновенные наименьшие квадраты, и это наиболее распространенный метод оценки линейной регрессии.

Давайте посмотрим на некоторые важные результаты в первой и второй таблицах.

  • Деп. Переменная: это зависимая переменная (в нашем примере «Значение» - это целевое значение).
  • R-квадрат: принимает значения от 0 до 1. Значения R-квадрата, близкие к 0, соответствуют регрессии, которая не объясняет никакой изменчивости данных, а значения, близкие к 1, соответствуют регрессии, которая объясняет всю изменчивость данных. Полученный r-квадрат говорит о том, что количество комнат объясняет 48,4% колебаний стоимости домов.
  • Coef: это коэффициенты (a, b), которые мы уже видели в уравнении модели ранее.
  • Стандартная ошибка: представляет точность прогноза. Чем ниже стандартная ошибка, тем лучше прогноз.
  • t, P ›t (p-значение): t-баллы и p-значения используются для проверки гипотезы. Переменная «Комнаты» имеет статистически значимое p-значение. Кроме того, с уровнем достоверности 95% мы можем сказать, что значение «Комнаты» находится в диапазоне от 8,279 до 9,925.

Уравнение линейной регрессии
Из приведенной выше таблицы давайте воспользуемся коэффициентами (coef) для создания линейного уравнения, а затем построим линию регрессии с точками данных.

# Rooms coef: 9.1021
# Constant coef: - 34.6706
# Linear equation: 𝑦 = 𝑎𝑥 + 𝑏
y_pred = 9.1021 * x['Rooms'] - 34.6706

где y_pred (также известный как yhat) - это прогнозируемое значение y (зависимая переменная) в уравнении регрессии.

График линейной регрессии
Для построения уравнения воспользуемся морским борном.

import seaborn as sns
import matplotlib.pyplot as plt
# plotting the data points
sns.scatterplot(x=x['Rooms'], y=y)
#plotting the line
sns.lineplot(x=x['Rooms'],y=y_pred, color='red')
#axes
plt.xlim(0)
plt.ylim(0)
plt.show()

Приведенный выше код дает следующий график.

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

Поздравляю! Вы только что построили свою первую простую линейную регрессию на Python. Если вы готовы принять вызов, узнайте, как построить множественную линейную регрессию.

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

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

Начнем с установки зависимых и независимых переменных. В этом случае мы собираемся использовать 2 независимые переменные.

  • Зависимая переменная: «Значение»
  • Независимая переменная: «Комнаты» и «Расстояние».

Давайте также определим зависимые и независимые переменные в нашем коде.

y = df_boston['Value'] # dependent variable
X = df_boston[['Rooms', 'Distance']] # independent variable

Теперь давайте добавим константу и подгоним модель.

X = sm.add_constant(X) # adding a constant
lm = sm.OLS(y, X).fit() # fitting the model

Посмотрим на результаты.

lm.summary()

R-квадрат немного увеличился. Кроме того, во второй таблице появилась новая строка, представляющая параметры переменной «Расстояние». Анализ этой таблицы аналогичен простой линейной регрессии, но если у вас есть какие-либо вопросы, дайте мне знать в разделе комментариев.

Линейная регрессия с помощью sklearn

Scikit-learn - это стандартная библиотека машинного обучения на Python, которая также может помочь нам сделать простую линейную регрессию или множественную линейную регрессию.

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

Во-первых, давайте установим sklearn. Если вы установили Python через Anaconda, у вас уже установлен sklearn. Если нет, вы можете установить его с помощью conda или pip.

# pip
pip install scikit-learn
# conda
conda install -c conda-forge scikit-learn

Теперь давайте импортируем linear_model из библиотеки sklearn.

from sklearn import linear_model

Зависимые и независимые переменные будут следующими.

y = df_boston['Value'] # dependent variable
X = df_boston[['Rooms', 'Distance']] # independent variable

Теперь нам нужно подогнать модель (обратите внимание, что порядок аргументов в методе подгонки с использованием sklearn отличается от statsmodels)

lm = linear_model.LinearRegression()
lm.fit(X, y) # fitting the model

Как и в statsmodels, мы используем метод прогнозирования для прогнозирования целевого значения в sklearn.

lm.predict(X)

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

>>> lm.score(X, y)
0.495
>>> lm.coef_
array([8.80141183, 0.48884854])
>>> lm.intercept_
-34.636050175473315

Результаты такие же, как в таблице, полученной с помощью statsmodels.

Обратите внимание, что мы не разделили данные на обучение и тестирование для простоты. Разделение данных перед построением модели - популярный подход, позволяющий избежать переобучения. Это тема для следующей статьи, так что следите за обновлениями!

Вот и все! Вы только что узнали, как сделать в Python простую множественную линейную регрессию. Вы можете найти весь код, написанный в этом руководстве, на моем Github.



Присоединяйтесь к моему списку рассылки с более чем 3 тыс. Человек, чтобы получить мою шпаргалку по Python для науки о данных, которую я использую во всех своих учебных пособиях (бесплатный PDF-файл)

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