Читать книгу Нейросети. Основы онлайн

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

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

Пример кода

```python

import numpy as np

import matplotlib.pyplot as plt

# Генерация данных для примера

np.random.seed(42)

X = 2 * np.random.rand(100, 1)

y = 4 + 3 * X + np.random.randn(100, 1)

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

theta = np.random.randn(2, 1)

# Добавление столбца единиц к X (для смещения)

X_b = np.c_[np.ones((100, 1)), X]

# Параметры градиентного спуска

learning_rate = 0.1

n_iterations = 1000

m = len(X_b)

# Функция для вычисления градиентов

def compute_gradient(X_b, y, theta):

gradients = 2/m * X_b.T.dot(X_b.dot(theta) – y)

return gradients

# Градиентный спуск

for iteration in range(n_iterations):

gradients = compute_gradient(X_b, y, theta)

theta = theta – learning_rate * gradients

print("Найденные параметры:", theta)

# Визуализация результатов

plt.scatter(X, y)

plt.plot(X, X_b.dot(theta), color='red')

plt.xlabel('X')

plt.ylabel('y')

plt.title('Линейная регрессия с использованием градиентного спуска')

plt.show()

```

Объяснение кода

1. Генерация данных:

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

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

– Параметры модели (веса) инициализируются случайными значениями.

3. Добавление столбца единиц:

– К матрице X добавляется столбец единиц, чтобы учесть смещение (константный член) в линейной модели.

4. Параметры градиентного спуска:

– Устанавливаются параметры обучения, такие как скорость обучения (learning rate) и количество итераций (n_iterations).