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

yᵢ = b₀ + b₁xᵢ + ε

у = зависимая переменная

х = независимая переменная

b₀ = точка пересечения линии регрессии (степень свободы)

b₁ = коэффициент линейной регрессии

ε = член ошибки

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

  • Простая линейная регрессия. Алгоритм регрессии моделирует взаимосвязь между зависимой переменной и одной независимой переменной.
  • Множественная линейная регрессия. В этом случае алгоритм регрессии моделирует взаимосвязь между зависимой переменной и несколькими независимыми переменными.

Постановка проблемы: Заработная плата V/S Опыт

Мы рассмотрим набор данных с двумя переменными: зарплатой (зависимая переменная) и опытом (независимая переменная). Цели этой задачи следующие:

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

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

1. Предварительная обработка данных

# import libraries
import numpy as np
import pandas as pd

import matplotlib.pyplot as plt
%matplotlib inline

import seaborn as sns
# mount drive
from google.colab import drive
drive.mount('/content/drive')

sns.scatterplot(x=df.YearsExperience, y = df.Salary)

Вывод

Глядя на график, мы видим, что заработная плата (y) и годы опыта (x) имеют линейную связь и коррелируют. График также показывает рост заработной платы по мере увеличения количества лет опыта. Воспользуемся предоставленной информацией для дальнейшего прогнозирования зарплаты в зависимости от года стажа.

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

x = df.iloc[:,:-1]      # independent variable (yoe)
y = df.iloc[:,1:]       # dependent variable (salary)

print(x.shape)
>> (30, 1)

Поскольку мы извлекли независимую переменную (x) и зависимую переменную (y), мы разделим обе переменные на обучающую и проверочную выборки. У нас есть 30 наблюдений, поэтому мы будем использовать 20 для обучающего набора и 10 для тестового набора. Мы разделяем наш набор данных, чтобы мы могли обучить нашу модель на одном наборе данных, а затем протестировать ее на другом.

Разделение набора данных на наборы для обучения и тестирования

# splitting the dataset into training and testing set
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x,y, test_size=1/3, random_state=0)
print(x_train.shape)
print(y_test.shape)

>> (20, 1)
>> (10, 1)

Мы не будем использовать Feature Scaling для простой линейной регрессии. Теперь, когда наш набор данных готов для анализа, мы начнем создавать модель простой линейной регрессии для указанной проблемы.

2. Подгонка простой линейной регрессии к тренировочному набору

Теперь следующим шагом является поиск наилучшей линии соответствия, где разница между прогнозируемыми значениями и фактическими значениями минимальна. Для этого мы импортируем класс LinearRegression из пакета линейной модели из sci-kit Learn. После импорта класса мы создадим объект класса регрессора.

from sklearn.linear_model import LinearRegression
regressor = LinearRegression()

regressor.fit(x_train,y_train)

# getting model coefficient 
regressor.coef_

>> array([[9345.94244312]])

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

3. Прогноз результатов набора тестов

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

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

# prediction of test and training set

x_pred = regressor.predict(x_train)
y_pred = regressor.predict(x_test)

Генерируются две переменные, y_pred и x_pred, которые включают прогнозы заработной платы для обучающего и тестового наборов соответственно.

Краткий обзор:

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

Мы обучили наборы данных, передав значения x_train и y_train в метод выбора модели train_test_split(). После успешного обучения модели мы спрогнозировали значения набора для тестирования и обучения, где мы передали независимые переменные (x = год опыта) данные обучения и тестирования, чтобы спрогнозировать заработную плату для набора для обучения и тестирования.

4. Визуализация результатов тренировочного набора

Результат тренировочного набора можно визуализировать графически.

plt.scatter(x_train,y_train,color='blue') 
plt.plot(x_train, x_pred, color= 'red')

plt.title("Salary vs Experience (Training Data)")
plt.xlabel('Years of Expereince')
plt.ylabel('Salary')
plt.show()

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

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

5. Визуализация тестового набора

plt.scatter(x_test,y_test,color='red') 
plt.plot(x_train, x_pred, color= 'green')

plt.title("Salary vs Experience (Training Data)")
plt.xlabel('Years of Expereince')
plt.ylabel('Salary')
plt.show()

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

Вот ссылка на мой репозиторий GitHub, где вы можете скачать данные и код Python: https://github.com/naghma28/linear-regression-model

Вы можете связаться со мной в LinkedIn: Нагма Фирдоус

Я ценю, что вы нашли время, чтобы прочитать это. Не стесняйтесь предлагать любые отзывы.

Нагма Фирдоус