Читать книгу Нейросети. Основы онлайн
Повторяя эти шаги, мы находим такие значения наклона и смещения, которые минимизируют ошибку и дают наилучшую аппроксимацию данных. Этот процесс иллюстрирует ключевые этапы градиентного спуска и демонстрирует, как параметры модели постепенно улучшаются, чтобы минимизировать функцию потерь.
Давайте рассмотрим пример использования градиентного спуска для задачи линейной регрессии с 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).