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

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

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

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

Чтобы сократить пример, я возьму температуру за неделю.

Day       Temperature    
Monday    23             
Tuesday   24             
Wednesday 26             
Thursday  25             
Friday    27
import numpy as np
import matplotlib.pyplot as plt

# Create a list of days of the week starting from Monday to Friday
days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']

# Create a list of temperatures for each day
temperatures = [23, 24, 26, 25, 27]

# Fit a linear regression to the data
slope, intercept = np.polyfit(range(len(days)), temperatures, 1)

# Create a linear temperature range based on the regression
temp_range = slope * np.array(range(len(days))) + intercept

# Plot the days of the week and temperatures
plt.plot(days, temperatures, 'o', label='Data')
plt.plot(days, temp_range, label='Linear Regression')

# Set the axis labels and legend
plt.xlabel('Day of the Week')
plt.ylabel('Temperature (°C)')
plt.legend()

# Show the plot
plt.show()

В приведенном выше примере мы находим наклон линии по линейному уравнению, т.е.

y = mx + c

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

Уравнение y = mx + c представляет собой форму линейного уравнения с пересечением наклона, где:

  • y — зависимая переменная, которая представляет результат или значение, которое мы ищем.
  • x — независимая переменная, представляющая ввод или переменную, которой мы манипулируем.
  • m — наклон линии, представляющий скорость, с которой зависимая переменная изменяется в ответ на изменение независимой переменной.
  • c — точка пересечения линии по оси y, представляющая точку, в которой линия пересекает ось y, когда x равен нулю.

Другими словами, уравнение y = mx + c представляет собой прямую линию на декартовой плоскости, где m — крутизна линии, а c — точка пересечения линии с осью y.

Вот некоторые основные термины, связанные с линейной регрессией:

  1. Зависимая переменная: переменная, которая прогнозируется или объясняется моделью. Ее также называют переменной отклика или целевой переменной.
  2. Независимая переменная: переменная (переменные), используемые для прогнозирования зависимой переменной. Ее также называют переменной-предиктором или объясняющей переменной.
  3. Простая линейная регрессия: Модель линейной регрессии, в которой используется только одна независимая переменная для прогнозирования зависимой переменной.
  4. Множественная линейная регрессия: модель линейной регрессии, в которой используется более одной независимой переменной для прогнозирования зависимой переменной.
  5. Наклон: коэффициент независимой переменной в уравнении линейной регрессии. Он представляет собой изменение зависимой переменной на единицу изменения независимой переменной.
  6. Пересечение: точка, в которой линия регрессии пересекает ось Y.
  7. Остатки: разница между фактическими значениями зависимой переменной и значениями, предсказанными моделью. Цель линейной регрессии — минимизировать сумму квадратов остатков.

Теперь давайте посмотрим, как предсказать температуру воскресенья, т.е. 7-й день недели, но здесь диапазон начинается с 0, поэтому воскресенье - 6-й день:

import numpy as np
import matplotlib.pyplot as plt

# Create a list of days of the week starting from Monday to Friday
days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']

# Create a list of temperatures for each day
temperatures = [23, 24, 26, 25, 27]

# Fit a linear regression to the data
slope, intercept = np.polyfit(range(len(days)), temperatures, 1)

# Predict the temperature for Sunday
sunday_temperature = slope * 6 + intercept

# Create a scatter plot of the data points
plt.scatter(range(len(days)), temperatures)

# Create a line plot of the regression line
plt.plot(range(len(days)), slope * np.array(range(len(days))) + intercept, color='r')

# Add labels and title to the plot
plt.xlabel('Day of the week')
plt.ylabel('Temperature (°C)')
plt.title('Linear Regression for Temperature')

# Add a marker for the predicted temperature of Sunday
plt.scatter(6, sunday_temperature, color='g')

# Show the plot
plt.show()

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

Чтобы построить данные, мы создаем точечную диаграмму точек данных, используя plt.scatter, и линейный график линии регрессии, используя plt.plot. Мы также добавляем метки и заголовок к графику, используя plt.xlabel, plt.ylabel и plt.title.

Чтобы показать прогнозируемую температуру воскресенья на графике, мы добавляем маркер, используя plt.scatter с координатой x 6 (поскольку воскресенье — это 7-й день недели с индексом 6) и прогнозируемую температуру воскресенья в качестве координаты y. Мы окрашиваем маркер в зеленый цвет, чтобы отличить его от точек данных и линии регрессии.

Наконец, мы показываем график, используя plt.show()

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

Допустим, мы хотим предсказать цену дома на основе его размера (в квадратных футах). Мы можем использовать алгоритм линейной регрессии для построения модели, которая предсказывает цену дома с учетом его размера.

Мы будем использовать набор данных, который содержит информацию о размере и цене домов в определенном районе. Набор данных состоит из двух столбцов: «Размер» (в квадратных футах) и «Цена» (в долларах).

Вот пример того, как может выглядеть набор данных:

Size (sqft) Price ($)
1500   200000
2000   250000
2500   300000
3000   350000
3500   400000

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

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

import matplotlib.pyplot as plt

size = [1500, 2000, 2500, 3000, 3500]
price = [200000, 250000, 300000, 350000, 400000]

plt.scatter(size, price)
plt.xlabel('Size (sqft)')
plt.ylabel('Price ($)')
plt.show()

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

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

Мы можем использовать алгоритм линейной регрессии, чтобы найти уравнение линии, которое лучше всего соответствует данным. Уравнение линии будет иметь вид y = mx + b, где y — прогнозируемая цена дома, x — размер дома, m — наклон линии, а b — точка пересечения с осью y.

from sklearn.linear_model import LinearRegression

X = [[1500], [2000], [2500], [3000], [3500]]
y = [200000, 250000, 300000, 350000, 400000]

model = LinearRegression()
model.fit(X, y)

print("Slope: ", model.coef_[0])
print("Intercept: ", model.intercept_)
Slope:  100.0
Intercept:  50000.0

Это выведет наклон и пересечение линии, которая лучше всего соответствует данным. Наклон представляет собой увеличение цены на единицу увеличения размера, а точка пересечения представляет собой цену дома с нулевым квадратным футом (что не имеет смысла в данном контексте).

Используя эту информацию, мы можем предсказать цену дома, учитывая его размер, используя уравнение y = mx + b:

size = 4000
price = model.predict([[size]])[0]

print("Size: ", size)
print("Predicted price: ", price)
Size:  4000
Predicted price:  450000.0

Это означает, что мы прогнозируем, что цена дома площадью 4000 квадратных футов составит 450 000 долларов.

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

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

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

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