Линейная регрессия – это фундаментальный алгоритм в машинном обучении и статистике, который позволяет нам понимать и прогнозировать взаимосвязь между переменными. В этом сообщении блога мы окунемся в мир линейной регрессии и узнаем, как реализовать ее с нуля с помощью Python. Не волнуйтесь, если вы новичок в программировании или машинном обучении: мы будем сопровождать вас шаг за шагом.
Давайте начнем!
Понимание линейной регрессии.
Прежде чем мы перейдем к программированию, давайте поймем основную концепцию линейной регрессии. Проще говоря, линейная регрессия направлена на поиск наиболее подходящей линии, которая представляет связь между независимой переменной (x) и зависимой переменной (y). Линия определяется двумя параметрами: наклоном (м) и пересечением (b).
Метод 1: использование метода наименьших квадратов (OLS):
Метод обычных наименьших квадратов (OLS) — один из наиболее распространенных подходов к решению задач линейной регрессии. Он минимизирует сумму квадратов остатков, чтобы найти оптимальные значения наклона и точки пересечения.
Вот пример реализации линейной регрессии с использованием метода МНК:
import numpy as np
def linear_regression_ols(x, y):
n = len(x)
x_mean = np.mean(x)
y_mean = np.mean(y)
slope = np.sum((x - x_mean) * (y - y_mean)) / np.sum((x - x_mean) 2)
intercept = y_mean - slope * x_mean
return slope, intercept
# Example usage
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 4, 5, 4, 6])
slope, intercept = linear_regression_ols(x, y)
print("Slope:", slope)
print("Intercept:", intercept)
Метод 2: использование градиентного спуска.
Градиентный спуск — еще один популярный алгоритм оптимизации, используемый в линейной регрессии. Он итеративно корректирует параметры, чтобы минимизировать функцию стоимости. Вот как можно реализовать линейную регрессию с помощью градиентного спуска:
def linear_regression_gradient_descent(x, y, learning_rate=0.01, epochs=100):
n = len(x)
slope = 0
intercept = 0
for _ in range(epochs):
y_pred = slope * x + intercept
slope_gradient = (-2 / n) * np.sum(x * (y - y_pred))
intercept_gradient = (-2 / n) * np.sum(y - y_pred)
slope -= learning_rate * slope_gradient
intercept -= learning_rate * intercept_gradient
return slope, intercept
# Example usage
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 4, 5, 4, 6])
slope, intercept = linear_regression_gradient_descent(x, y)
print("Slope:", slope)
print("Intercept:", intercept)
Метод 3: использование функции Polyfit NumPy:
Если вы предпочитаете более краткий подход, вы можете использовать функцию Polyfit NumPy, которая подгоняет полином степени 1 (линию) к данным с использованием метода наименьших квадратов. Вот пример:
import numpy as np
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 4, 5, 4, 6])
slope, intercept = np.polyfit(x, y, deg=1)
print("Slope:", slope)
print("Intercept:", intercept)
В этой записи блога мы рассмотрели несколько методов реализации линейной регрессии с нуля в Python. Мы рассмотрели метод обычных наименьших квадратов (OLS), градиентный спуск и даже удобный вариант с использованием функции Polyfit NumPy. Линейная регрессия – мощный инструмент для понимания и прогнозирования взаимосвязей между переменными. Овладение им – решающий шаг на пути специалиста по данным или энтузиаста машинного обучения.
Итак, экспериментируйте с этими методами. Приятного кодирования!