Введение:

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

import numpy as np

# Generate some random training data
num_examples = 100
num_features = 3
num_targets = 2

X = np.random.randn(num_examples, num_features)  # input data
W_true = np.random.randn(num_targets, num_features)  # true model weights
b_true = np.random.randn(num_targets, 1)  # true bias
y_true = X.dot(W_true.T) + b_true.T  # true target variable
noise = 0.1 * np.random.randn(num_examples, num_targets)  # add some noise to target variable
y = y_true + noise  # observed target variable

# Initialize model parameters
W = np.zeros((num_targets, num_features))
b = np.zeros((num_targets, 1))

# Set hyperparameters
learning_rate = 0.01
num_iterations = 1000

# Gradient descent loop
for i in range(num_iterations):
    # Compute predicted values
    y_pred = X.dot(W.T) + b.T

    # Compute gradient of cost function with respect to W and b
    grad_W = -(2/num_examples) * (y - y_pred).T.dot(X)
    grad_b = -(2/num_examples) * np.sum(y - y_pred, axis=0, keepdims=True).T

    # Update model parameters
    W = W - learning_rate * grad_W
    b = b - learning_rate * grad_b

    # Compute cost function
    cost = np.mean((y - y_pred)**2)

    # Print progress
    if i % 100 == 0:
        print(f"Epoch {i}: Cost = {cost}")
        print(f"{y_pred.shape} = {X.shape}x{W.T.shape} + {b.T.shape}")
        print(f"grad_W: {grad_W.T.shape}, grad_b: {grad_b.T.shape}")

# Print final results
print("True weights:\n", W_true)
print("Estimated weights:\n", W)
print("True bias:\n", b_true)
print("Estimated bias:\n", b)

Генерация случайных обучающих данных:

Первым шагом в нашей реализации линейной регрессии является создание некоторых случайных обучающих данных. Мы создадим 100 примеров, в каждом из которых будет 3 функции и 2 цели. Мы будем использовать функцию NumPy random.randn для генерации случайных значений Гаусса для входных данных, истинных весов модели, истинного смещения и шума. Затем мы вычислим истинную целевую переменную, умножив входные данные на истинные веса модели и добавив истинное смещение. Наконец, мы добавим некоторый гауссовский шум к истинной целевой переменной, чтобы создать наблюдаемую целевую переменную.

Инициализация параметров модели:

Следующим шагом является инициализация параметров модели. Мы установим веса в нули и смещение в нули. Мы будем использовать функцию NumPy zeros для создания массивов соответствующей формы.

Установка гиперпараметров:

Следующим шагом является установка гиперпараметров. Мы установим скорость обучения на 0,01 и количество итераций на 1000.

Цикл градиентного спуска:

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

Печать окончательных результатов:

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

Заключение:

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