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

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

Существует два типа линейной регрессии: простая линейная регрессия и множественная линейная регрессия.

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

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

Где y — зависимая переменная, x — независимая переменная, w — наклон, b — точка пересечения, а формула для нахождения w и b:

[ w = nΣ(xi-x̄)(yi-ȳ) / nΣ(xi-x̄)²

b = ȳ-wx̄ ]

где n — количество наблюдений, — сумма от 1 до n, xi — наблюдения в x (признак), yi — это наблюдения в y (цель), — среднее значение всех x, а ȳ — среднее значение всех y.

Пример:

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

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

y = wx + b

где y — цель, т. е. цена ($), x — характеристика, т. е. размер (квадратные футы), w — наклон, а b — точка пересечения.

Используя приведенную выше формулу, мы вычисляем w и b и получаем:

w = 50 и b = 0

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

y = 50x + 0

Теперь мы можем использовать это уравнение для прогнозирования цены дома площадью 1800 квадратных футов:

y = 50(1800) + 0 = $90,000

Поэтому мы прогнозируем, что дом площадью 1800 квадратных футов будет стоить 90 000 долларов. Это очень простой пример «прогнозирования цен на жилье».

Реализация кода линейной регрессии с использованием Scikit-learn

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

X = np.array([1000, 1500, 2000, 2500, 3000]).reshape(-1,1)
y = np.array([50000, 75000, 100000, 125000, 150000])

lr = LinearRegression()
lr.fit(X, y)
pred = lr.predict(X)
print('The value of slope w is',lr.coef_)
print('The value of intercept b is',lr.intercept_)

#The value of slope w is 50
#The slope of intercept b is 0

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

Множественная линейная регрессия включает две или более независимых переменных и одну зависимую переменную. Он используется для установления линейной зависимости между зависимой переменной и независимыми переменными. Уравнение множественной линейной регрессии:

Где y — зависимая переменная, x1, x2, …, xn — независимые переменные, а b — точка пересечения и формула для нахождения w и b:

[ w = (X^T X)^-1 X^T Y

b = Y_bar — b^T X_bar ]

где:

  • w - вектор-столбец оценочных коэффициентов для каждой независимой переменной (каждого признака), где b - член пересечения
  • X — матрица, содержащая независимые значения, т. е. все значения x (x1, x2, …xn), которая включает столбец единиц для термина пересечения и столбец для каждой независимой переменной
  • Y — вектор-столбец зависимой переменной, т. е. все значения y (целевые значения).
  • Y_bar — это среднее значение зависимой переменной.
  • X_bar — это вектор-строка средних значений каждой независимой переменной.

Пример:

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

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

y = w1x1 + w2x2 + w3x3 + b

где y — цель, т. е. цена ($), x1 — первая характеристика, т. е. x2 — вторая характеристика, т. е. количество ванных комнат, x3 — третья характеристика, т. е. площадь в квадратных футах, w1, w2 и w3 — веса для каждой характеристики и б - перехват.

Используя приведенную выше формулу, мы вычисляем w1, w2, w3 и b и получаем:

w = массив([-2500, -2500, 20]) и

b = 2500.0000010623

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

y = (-2500)x1 + (-2500)x2 + (20)x3 + 2500

Теперь мы можем спрогнозировать стоимость дома с 5 спальнями, 5 ванными комнатами и площадью 5 000 квадратных метров:

y = (-2500)(5) + (-2500)(5) + (20)(5000) + 2500 = $77,500.

Таким образом, мы прогнозируем, что дом с 5 спальнями, 5 ванными комнатами и площадью 5000 квадратных метров будет стоить 77 500 долларов.

import pandas as pd
import numpy as np

df = pd.DataFrame({'# of bedrooms':[3,4,2,4], '# of bathrooms':[2,3,1,3], 'Square footage':[2000,3000,1500,3500], 'Price($)':[30000,45000,25000,55000]})

X = df.iloc[:, :3]
y = df.iloc[:, -1]

from sklearn.linear_model import LinearRegression
lr = LinearRegression()
lr.fit(X, y)

print('The matrix containing all weights w is',lr.coef_)
print('The value of intercept b is', lr.intercept_)

#The matrix containing all weights w is array([-2500., -2500.,    20.])
#The value of intercept b is 2500.0000000010623

our_house = np.array([5,5,5000]).reshape(1,-1)
lr.predict(our_house)

#array([77500.])

Заключение

  1. В простой линейной регрессии у нас есть одна входная функция (x) и одна целевая переменная (y), тогда как мы пытаемся нарисовать линию, пытаясь коснуться каждой точки данных на графике.
  2. В множественной регрессии у нас есть более 1 признака (x1, x2, ….xn) и одна целевая переменная (y), тогда как мы пытаемся нарисовать плоскость (в случае 2 признаков) и гиперплоскость (в случае 3 функции), который пытается коснуться всех точек данных на графике.

Чтобы узнать о последних сведениях, тенденциях и инновациях в области искусственного интеллекта, машинного обучения и науки о данных, а также наводящих на размышления дискуссиях, обращайтесь по адресу https://twitter.com/deepshikhxr